Replies: 15 comments 18 replies
-
在华山派cr1825上运行rust语言实现的zCore,把生成的内核镜像,通过u-boot tftp网络启动引导启动系统。 tftp引导自定义内核的方法则可以参考这个文档: |
Beta Was this translation helpful? Give feedback.
-
我尝试在cr1811h上运行zCore, 结论是可以运行但还进不到shell。操作步骤如下:
关于初次使用cr1811h,一些需要注意的事:
|
Beta Was this translation helpful? Give feedback.
-
烧录系统到华山派(zy)烧录方式支持: ● tftp ● sdcard ● eMMC ● usb dick 方式一:TFTP 烧录 原理: 配置tftp服务端配置信息
开发板配置:
错误记录 1. 在开发板上执行tftp测试,遇到的错误
相关链接: |
Beta Was this translation helpful? Give feedback.
-
macOS 13.0.1 串口调试配置 (zy)目的:通过macOS连接到开发板,执行相关指令。 实验所需工具:
一、下载串口驱动:https://www.prolific.com.tw/US/ShowProduct.aspx?p_id=229&pcid=41 解压、安装 PL2303HXD_G_Mac Driver_v2_1_0_20210311.zip (需要重启电脑) 二、通过串口连接板子1. 将板子与电脑连接如下图: 备注:开发板的 TX 连串口工具的 RX,开发板的 RX 连接串口工具的 TX。 在硬件->USB查看 2. 查看串口设备信息
3. 使用串口终端工具 screen(系统自带)连接板子
配置完成。 screen 常见指令
备注:GNU Screen是一款由GNU计划开发的用于命令行终端切换的自由软件 其他推荐:图形化串口调试工具:串口调试助手,通过app store 安装 |
Beta Was this translation helpful? Give feedback.
-
烧录的流程: 一、安装、配置tftp服务端 二、rCore tutorial 结束. 三、CV1811H 开发板配置 相关附件: |
Beta Was this translation helpful? Give feedback.
-
最近童鞋们正紧锣密鼓地在华山派CV1811H开发板上移植适配自研OS,对此我对之前zCore适配华山派的开发过程和开发要点,进行了技术梳理并形成文档供童鞋们参考指正,包括如下几方面:
若有问题请多多指正。 |
Beta Was this translation helpful? Give feedback.
-
ArceOS输出初步尝试更改modules/axhal/src/platform/qemu_virt_riscv/boot.rs文件 添加sbi_call输出调用函数 const SBI_CONSOLE_PUTCHAR: usize = 1;
const SBI_CONSOLE_GETCHAR: usize = 2;
unsafe fn console_putchar(){
sbi_call(SBI_CONSOLE_PUTCHAR, 72, 0, 0);
}
unsafe fn console_getchar() -> isize {
return sbi_call(SBI_CONSOLE_GETCHAR, 0, 0, 0);
}
fn sbi_call(which: usize, arg0: usize, arg1: usize, arg2: usize) -> isize{
let ret: isize;
unsafe{
core::arch::asm!("ecall",
lateout("x10") ret,
in("x10") arg0, in("x11") arg1, in("x12") arg2, in("x17") which
);
}
ret
} 更改_start()函数, 在汇编代码中添加 call {console_putchar} call {init_boot_page_table} 添加 console_putchar = sym console_putchar, 结果在qemu-virt环境下是输出一个H字符,然后打印ArceOS的信息,在CV1811H上尝试发现不仅可以打印一个H字符,以前没办法显示的ArceOS信息也能正常显示。 还存在的问题 (已解决) |
Beta Was this translation helpful? Give feedback.
-
我们遇到无法进入u-boot的情况,需要重新烧写u-boot,应该怎么办呢?先谢了! |
Beta Was this translation helpful? Give feedback.
-
cv1811h的时钟频率和MMIO应该如何定义 |
Beta Was this translation helpful? Give feedback.
-
大佬们有遇到linux kernel卡死,无法正常启动的情况吗? [ 0.000000] Linux version 5.10.4-tag- (yqf@yqf-virtual-machine) (riscv64-unknown-linux-musl-gcc (Xuantie-900 linux-5.10.4 musl gcc Toolchain V2.4.0 B-20220428) 10.2.0, GNU ld (GNU Binutils) 2.35) #1 PREEMPT Sat Oct 29 14:58:47 CST 2022 |
Beta Was this translation helpful? Give feedback.
-
ArceOS App on CV1811H
计划做的内容
若有问题还请多多指正。 代码仓库:https://github.com/elliott10/arceos/tree/cv1811 其中 cv1811h 文件夹下有移植所用到的相关工具。 |
Beta Was this translation helpful? Give feedback.
-
疑问: ArceOS 应用及命令行参数 指定 feature 是如何传递下去并最终获得相应feature支持的 |
Beta Was this translation helpful? Give feedback.
-
一种通过串口连接华山派传输镜像的方法一些可能出现的情况
前期准备购买或者借用一个USB转TTL转接器(我这边用的是CH340G模块)的,但是应该都行? 连接根据转接器和华山派上的图示,将两板的GND相连,RX[D]连TX[D],TX[D]连RX[D] 复现我当前所生成的代码文件
加载镜像前期准备
加载镜像
出现下述情况为异常情况,请查看文件中指定的 device 是否存在。
|
Beta Was this translation helpful? Give feedback.
-
BUG FIX REPORT: 设备(板子+TTL)能正常连接上别的电脑(连接上之后出现 首先运行下命令,看看能不能找到 CH340 设备
如果是的话,运行 最后排查是不是跟你的笔记本没有安装驱动有关,上官网按照操作流程重新编译安装一下。 |
Beta Was this translation helpful? Give feedback.
-
[TOC] 实验环境搭建点击展开WSL2 Ubuntu: 自行搜索安装方式 http://rcore-os.cn/arceos-tutorial-book/ch01-01.html Rust环境:
参见: http://rcore-os.cn/arceos-tutorial-book/ch01-01.html http://rcore-os.cn/arceos-tutorial-book/ch01-02.html
RsProxy.cn 加速镜像服务 [可选]View Details步骤一:设置 Rustup 镜像, 修改配置 export RUSTUP_DIST_SERVER="https://rsproxy.cn"
export RUSTUP_UPDATE_ROOT="https://rsproxy.cn/rustup" 步骤二:安装 Rust(请先完成步骤一的环境变量导入并 source rc 文件或重启终端生效)
步骤三:设置 crates.io 镜像, 修改配置 [source.crates-io]
replace-with = 'rsproxy'
#replace-with = 'rsproxy-sparse'
[source.rsproxy]
registry = "https://rsproxy.cn/crates.io-index"
[source.rsproxy-sparse]
registry = "sparse+https://rsproxy.cn/index/"
[registries.rsproxy]
index = "https://rsproxy.cn/crates.io-index"
[net]
git-fetch-with-cli = true 补充说明 ArceOS 基础信息点击展开ArceOS GitHub 网址:https://github.com/rcore-os/arceos ArceOS 介绍 PPT:https://learningos.github.io/os-lectures/oslabs/biglabs.html 克隆仓库git clone https://github.com/rcore-os/arceos.git
cd arceos ArceOS 编译、运行依赖cargo install cargo-binutils rustup target list | grep installed
rustup target add riscv64gc-unknown-none-elf 编译
运行默认 ARCH = x86_64 make justrun 编译运行特定应用、特定架构模板:
eg:
riscv64: 运行 helloword默认 ARCH=x86_64, 这里用 riscv64
View Details
aarch64: 运行 helloword
x86_64: 运行 helloword默认 ARCH=x86_64, WSL2 注意。
Win10 + WSL2 Ubuntu 烧录环境配置所需硬件:
串口板、开发板测试Windows 串口板驱动与测试点击展开Linux版在下面单独的一节
WSL2 串口板驱动 和 minicom 连接串口测试 [可选]点击展开
烧录方式一:TFTPWindows 运行 tftp服务下载一个 tftpd64 软件,双击运行,软件所在目录就是 tftp目录。bingo!TFTP 服务端配置完成。 WSL2 TFTP服务端 安装、配置 【不建议使用】不用点开,通信问题 没解决# 安装tftpd 服务端;需要客户端的话,安装 tftp-hpa
sudo apt install tftpd-hpa
# 配置 TFTP server
sudo vim /etc/default/tftpd-hpa # /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/srv/tftp"
TFTP_ADDRESS="172.18.41.90:69"
TFTP_OPTIONS="--secure"
# 不需要tftp上传
#--secure 不设置会有跨目录的问题 --create是要自己添加的,给客户端写入数据的权力 # august@wslu20:~$ ls -ld /srv/tftp
# drwxr-xr-x 2 root nogroup 4096 Jul 16 09:35 /srv/tftp
sudo chown tftp:tftp /srv/tftp
# sudo chmod 777 /tftpboot //修改工作目录权限
# 重新启动TFTP服务
sudo service tftpd-hpa restart
# 查看tftp服务是否开启
netstat -a | grep tftp 但是问题是 开发板(局域网)访问 WSL2 的 服务端口不方便!!!没有大刀阔斧整改WSL2网络的决心 不要在WSL2里提供UDP服务给局域网。
## 不支持UDP协议
>netsh interface portproxy add v4tov4 listenport=69 listenaddress=0.0.0.0 connectport=69 connectaddress=172.18.41.90 protocol=udp
>netsh interface portproxy show all
开发板配置 ( TFTP 客户端)点击展开查看Win10 有线网卡IP: 开发板配置: # 服务端IP:169.254.133.210 # 用网线连接电脑和开发板,然后ipconfig /all查看有线网口IP
# 掩码 255.255.255.0
# 配置客户端IP: 169.254.133.211 # 跟 服务端一个网段即可
# 开发板 u-boot 配置:
# mars_c906#
# 配置IP,保持与tftp服务器在同一个网段
setenv ipaddr 169.254.133.211
# 配置tftp server的地址
setenv serverip 169.254.133.210
# 配置网关,一个网段 不需要
# setenv gatewayip x.x.x.x
# 确定这么使用后 可以 saveenv 保存下来,下次运行还是这个配置。
# 在制作好 os.itb 并拷贝到 tftp 服务目录之后,就可以 从tftp烧录启动了 后续烧录启动命令:
its、 itb 镜像制作、tftp烧录运行步骤
点击展开# 工具安装
# Ubuntu
# sudo apt-get install u-boot-tools
# sudo apt-get install device-tree-compiler
# MacOS
# brew install u-boot-tools
# brew install dtc
# 测试必需工具安装情况
# $ dtc --version
# Version: DTC 1.5.0
# ESCRIPTION
# Device Tree Compiler, dtc, takes as input a device-tree in a given format and outputs a device-tree in another
# format for booting kernels on embedded systems. Typically, the input format is "dts", a human readable source
# format, and creates a "dtb", or binary format as output. 可以反向操作
# 通过 make build 编译出 os.bin
make A=apps/helloworld ARCH=riscv64 LOG=debug build
cd apps/helloworld/
cp helloworld_qemu-virt-riscv.bin os.bin
# 压缩 os.bin.gz
gzip -c os.bin > os.bin.gz
# 根据厂家提供的 dts 文件生成 dtb 文件,mkimage 会用到
dtc -I dts -O dtb -o cv1811h.dtb cv1811h.dts
# 编写/修改 its 文件;its 文件是自己编写的,根据 image source file的语法
# 这里我们直接用 前辈编写好的 cv1811h 的 its文件 并按需修改
# 确认 os.its 中 kernel-1 的 data 文件名 真实存在,文件名是 os.bin.gz
# 确认 os.its 中 fdt-1 的 data 文件名 真实存在, 文件名是 cv1811h.dtb
# 根据 os.its + os.bin.gz + cv1811h.dtb 生成 os.itb
mkimage -f os.its os.itb
# 拷贝 os.itb 到 tftp 服务目录,开发板烧录使用
cp os.itb /mnt/c/Users/August/Downloads/tftpd64.464
# 开发板 u-boot 中正确配置 ipaddr 和 serverip 后:
# 下载os.itb烧录 # 加载 os.itb 到 0x82000000
tftpboot 0x82000000 os.itb
# boot
bootm 0x82000000 如何编写 its 文件点击展开its 语法参考博客参考 /*
* U-Boot uImage source file with multiple kernels, ramdisks and FDT blobs
*/
/dts-v1/;
/ {
description = "Various kernels, ramdisks and FDT blobs";
#address-cells = <2>;
images {
kernel-1 {
description = "cvitek kernel arceos for cv1811";
data = /incbin/("./os.bin.gz");
type = "kernel";
arch = "riscv";
os = "linux";
compression = "gzip";
load = <0x80200000>;
entry = <0x80200000>;
hash-2 {
algo = "crc32";
};
};
/*FDT*/
fdt-cv1811h_wevb_0007a_emmc {
description = "cvitek device tree - cv1811h_wevb_0007a_emmc";
data = /incbin/("./cv1811h.dtb");
type = "flat_dt";
arch = "riscv";
compression = "none";
hash-1 {
algo = "sha256";
};
};
};
/*CFG*/
configurations {
default = "config-cv1811h_wevb_0007a_emmc";
config-cv1811h_wevb_0007a_emmc {
description = "boot cvitek system with board cv1811h_wevb_0007a_emmc";
kernel = "kernel-1";
fdt = "fdt-cv1811h_wevb_0007a_emmc";
};
};
}; ArceOS 启动不显示输出问题这个问题已经解决,参见: https://github.com/orgs/rcore-os/discussions/24#discussioncomment-6472867, 即可在华山派开发板正常运行helloworld。无需如下修改。 View Details// modules/axhal/src/platform/qemu_virt_riscv/boot.rs 添加如下函数
use core::arch::asm;
const SBI_CONSOLE_GETCHAR: usize = 2;
// 或者unsafe
pub fn console_getchar() -> isize {
sbi_call(SBI_CONSOLE_GETCHAR, 0, 0, 0)
}
// 主要是要调用一下 sbi_call, 这个给出 sbi_call 实现,方便下面调用。
fn sbi_call(which: usize, arg0: usize, arg1: usize, arg2: usize ) -> isize {
let ret:isize;
unsafe {
asm!("ecall",
lateout("x10") ret,
in("x10") arg0,
in("x11") arg1,
in("x12") arg2,
in("x17") which,
);
}
ret
} // modules/axhal/src/platform/qemu_virt_riscv/boot.rs
// 以下位置添加如下2行,调用一下 sbi_call, console_putchar或者getchar
unsafe extern "C" fn _start() -> ! {
// PC = 0x8020_0000
// a0 = hartid
// a1 = dtb
core::arch::asm!("
mv s0, a0 // save hartid
mv s1, a1 // save DTB pointer
la sp, {boot_stack}
li t0, {boot_stack_size}
add sp, sp, t0 // setup boot stack
call {init_boot_page_table}
call {console_getchar} // <<<<<<< 添加这一行
call {init_mmu} // setup boot page table and enabel MMU
li s2, {phys_virt_offset} // fix up virtual high address
add sp, sp, s2
mv a0, s0
mv a1, s1
la a2, {entry}
add a2, a2, s2
jalr a2 // call rust_entry(hartid, dtb)
j .",
phys_virt_offset = const PHYS_VIRT_OFFSET,
boot_stack_size = const TASK_STACK_SIZE,
boot_stack = sym BOOT_STACK,
console_getchar = sym console_getchar, // <<<<<<< 添加这一行
init_boot_page_table = sym init_boot_page_table,
init_mmu = sym init_mmu,
entry = sym super::rust_entry,
options(noreturn),
)
} 此后烧录运行成功输出 ArceOS ,但是会显示一个报错, 解决办法是: // modules/axruntime/src/lib.rs
// 注释掉 如下几行,位置大概在 181-185行
INITED_CPUS.fetch_add(1, Ordering::Relaxed);
while !is_init_ok() {
core::hint::spin_loop();
}
|
Beta Was this translation helpful? Give feedback.
-
目标:
rcore tutorial v3和arceos porting 到华山派cv1811H硬件开发板上。
尽量形成与OS无关的硬件相关crate
参考:
在华山派cr1825(工程板,是CV1811H的前身)上运行rust语言实现的zCore,把生成的内核镜像,通过u-boot tftp网络启动引导启动系统。tftp引导自定义内核的方法则可以参考这个文档:
烧写zCore for cr1825的脚本和文档,都放到了这个仓库,仅供参考。
该crate可做到与具体操作系统无关。形成与OS无关的硬件访问部分。
如有兴趣一起来探索,请联系我 yuchen AT tsinghua.edu.cn OR 微信 id chyyuu
Beta Was this translation helpful? Give feedback.
All reactions