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/binPATH
```

## 二、内核获取

通过验证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