积分298 / 贡献0

提问5答案被采纳4文章44

[经验分享] OpenHarmony基于llvm工具链编译riscv架构的内核 原创

润开鸿_闻飞 显示全部楼层 发表于 2024-6-17 10:36:06

itopen组织 1、提供OpenHarmony优雅实用的小工具 2、手把手适配riscv + qemu + linux的三方库移植 3、未来计划riscv + qemu + ohos的三方库移植 + 小程序开发 4、一切拥抱开源,拥抱国产化

一、工具链获取

  • 将OpenHarmony的 prebuilts/clang/ohos/linux-x86_64/llvm工具提取出来
  • 安装riscv交叉编译工具链
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_KALLSYMSCONFIG_BPF_SYSCALL宏关闭同时屏蔽一行代码

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;
}

三、内核编译

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/

    wget https://busybox.net/downloads/busybox-1.36.0.tar.bz2
    tar -xvf busybox-1.36.0.tar.bz2
  • 编译riscv的busybox

    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和rootfs放在同一目录下后运行即可

    ./mkrootfs.sh

4.2 riscv的内核启动

将以下文件放到一个目录下后,直接运行itopen: qemu-riscv-run.sh脚本即可

qemu-riscv-run.sh

Image

rootfs.ext4

./qemu-riscv-run.sh

4.3 启动成功标志

test ......

Please press Enter to activate this console.

4.4 退出qemu

Ctrl + A然后输入x即可

无用

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论3

mengfei

沙发 发表于 2024-6-17 14:16:32
对于希望快速体验riscv跑linux内核的同学非常有帮助

zhonghuihui

板凳 发表于 2024-7-1 15:30:58
老师下午好!我这边软件绿色联盟的运营,看到您写的这篇文章很不错,想问一下方便转载吗,转载到软件绿色联盟的微信公众号上,绿盟覆盖主体主要是开发者,通过日常发布技术文章赋能开发者,转载文章会备注来源以及作者,期待老师的回复!

润开鸿_闻飞

发表于 2024-7-1 20:22  IP属地: 江苏省扬州市

回复 zhonghuihui: 可以转载

【1 条回复】

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部