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 arceosArceOS 编译、运行依赖cargo install cargo-binutilsrustup target list | grep installed
rustup target add riscv64gc-unknown-none-elf编译
运行默认 ARCH = x86_64 make justrun 编译运行特定应用、特定架构模板: eg:
riscv64: 运行 helloword默认 ARCH=x86_64, 这里用 riscv64 View Detailsaarch64: 运行 hellowordx86_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.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
目标:
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