OpenHarmony开发者论坛
标题:
OpenHarmony基于llvm工具链编译riscv架构的内核
[打印本页]
作者:
润开鸿_闻飞
时间:
2024-6-17 10:36
标题:
OpenHarmony基于llvm工具链编译riscv架构的内核
[md][itopen组织](
https://gitee.com/itopen
)
1、提供OpenHarmony优雅实用的小工具
2、手把手适配riscv + qemu + linux的三方库移植
3、未来计划riscv + qemu + ohos的三方库移植 + 小程序开发
4、一切拥抱开源,拥抱国产化
## 一、工具链获取
- 将OpenHarmony的 `prebuilts/clang/ohos/linux-x86_64/llvm`工具提取出来
- 安装riscv交叉编译工具链
```shell
sudo apt-get install gcc-riscv64-linux-gnu
cp ~/OpenHarmony/OpenHarmony-master/prebuilts/clang/ohos/linux-x86_64/llvm ~/bin/llvm
export PATH=~/bin/llvm/bin
PATH
```
## 二、内核获取
通过验证linux原生的内核编译riscv架构存在问题,选择OpenHarmony的内核,同时需要将 `CONFIG_KALLSYMS`和 `CONFIG_BPF_SYSCALL`宏关闭同时屏蔽一行代码
```shell
cp ~/OpenHarmony/OpenHarmony-master/kernel/linux/linux-5.10 ~/kernel/linux-5.10
# 将kernel/sched/core.c文件的7555行屏蔽,修改后如下:
int sched_cpu_starting(unsigned int cpu)
{
sched_rq_cpu_starting(cpu);
sched_tick_start(cpu);
// clear_eas_migration_request(cpu);
return 0;
}
```
## 三、内核编译
```shell
cd ~/kernel/linux-5.10
export ARCH=riscv
export CROSS_COMPILE=riscv64-linux-gnu-
make CC=clang LLVM=1 LLVM_IAS=1 defconfig
make menuconfig
# 将CONFIG_KALLSYMS和CONFIG_BPF_SYSCALL宏关闭
make CC=clang LLVM=1 LLVM_IAS=1 -j32
# 将编译成功的镜像拷贝到qemu/qemu_riscv
cp arch/riscv/boot/Image ~/qemu/qemu_riscv/Image
```
## 四、qemu测试内核
### 4.1 busybox制作rootfs
- **busybox版本选择**
本次选择的是busybox-1.36.0.tar.bz2
- **下载busybox**
官网下载地址:
https://busybox.net/downloads/
```shell
wget
https://busybox.net/downloads/busybox-1.36.0.tar.bz2
tar -xvf busybox-1.36.0.tar.bz2
```
- **编译riscv的busybox**
```shell
export ARCH=riscv
export CROSS_COMPILE=riscv64-linux-gnu-
# 设置 static binary
make defconfig menuconfig
Settings --->
--- Build Options
Build static binary (no shared libs)
# 编译安装
make -j$(nproc)
make install CONFIG_PREFIX=/home/wen_fei/qemu/qemu_riscv/rootfs
```
- **镜像打包**
直接将[itopen: mkrootfs.sh](
https://gitee.com/itopen/script/blob/master/qemu/mkrootfs.sh
)和rootfs放在同一目录下后运行即可
```
./mkrootfs.sh
```
### 4.2 riscv的内核启动
将以下文件放到一个目录下后,直接运行[itopen: qemu-riscv-run.sh](
https://gitee.com/itopen/script/ ... u/qemu-riscv-run.sh
)脚本即可
qemu-riscv-run.sh
Image
rootfs.ext4
```shell
./qemu-riscv-run.sh
```
### 4.3 启动成功标志
```shell
test ......
Please press Enter to activate this console.
```
### 4.4 退出qemu
Ctrl + A然后输入x即可
[/md]
作者:
mengfei
时间:
2024-6-17 14:16
对于希望快速体验riscv跑linux内核的同学非常有帮助
作者:
zhonghuihui
时间:
2024-7-1 15:30
老师下午好!我这边软件绿色联盟的运营,看到您写的这篇文章很不错,想问一下方便转载吗,转载到软件绿色联盟的微信公众号上,绿盟覆盖主体主要是开发者,通过日常发布技术文章赋能开发者,转载文章会备注来源以及作者,期待老师的回复!
作者:
润开鸿_闻飞
时间:
2024-7-1 20:22
回复
zhonghuihui
: 可以转载
欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/)
Powered by Discuz! X3.5