本地环境 windows11+wsl2+ubuntu20.04+QEMU+busybox , QEMU和busybox这个不在这里做介绍了,网上的资料也比较全面。以下的操作都是在ubuntu20.04系统进行。确保自己网络状态良好,内存空间足够(4G左右)。编译OH的linux内核是x86_64类型的,已经解决了报错部分。

感兴趣的小伙伴可以参考下面步骤来。

1.下载Openharmony-4.0-Release的内核源码

1.1 下载oh内核源码

    https://gitee.com/openharmony/kernel_linux_5.10/tree/OpenHarmony-4.0-Release/
    1. cd ~
    2. make Oh_linux5.10
    3. cd Oh_linux5.10
    4. git clone https://gitee.com/openharmony/kernel_linux_5.10.git -b OpenHarmony-4.0-Release

1.2 编译并配置内核

    1. cd kernel_linux_5.10
    2. export ARCH=x86  //设置cpu类型
    3. make x86_64_defconfig //设置编译默认的配置参数
    4. make menuconfig  //修改参数
    
    General setup  --->
    
           ----> [] Initial RAM filesystem and RAM disk (initramfs/initrd) support
    
        Device Drivers  --->
    
           [
] Block devices  --->
    
                   <*>   RAM block device support
    
                   (65536) Default RAM disk size (kbytes) 
    # 退出保存配置并编译
    5. make -j4
如果编译成功,这个时候会在 Oh_linux5.10/kernel_linux_5.10/arch/x86_64/boot/目录下生成 bzImage 文件

2.搭建Busybox环境

2.1 下载 busybox 源码

    1. cd ~
    2. make my_busybox
    3. cd my_busybox
    4. git clone git://git.busybox.net/busybox  //下载源码
    5. cd busybox

2.2 编译配置

    make menuconfig
    
    Settings(Build Options) 
        -> 勾选 Build static binary (no shared libs) //不使用静态库
    
    # 退出保存配置并编译
    make -j4
    # 默认安装在 busybox/_install 中
    make intall

编译完成后的busybox就安装在源码根目录下的_install目录了,我们进入_install目录,补充一些必要的文件或目录,相关的shell命令如下:

    # mkdir etc dev mnt
    # mkdir -p proc sys tmp mnt
    # mkdir -p etc/init.d/
    # vim etc/fstab
    proc        /proc           proc         defaults        0        0
    tmpfs       /tmp            tmpfs      defaults        0        0
    sysfs       /sys            sysfs        defaults        0        0
    # vim etc/init.d/rcS
    echo -e "Welcome to tinyLinux"
    /bin/mount -a
    echo -e "Remounting the root filesystem"
    mount  -o  remount,rw  /
    mkdir -p /dev/pts
    mount -t devpts devpts /dev/pts
    echo /sbin/mdev > /proc/sys/kernel/hotplug
    mdev -s
    # chmod 755 etc/init.d/rcS
    # vim etc/inittab
    ::sysinit:/etc/init.d/rcS
    ::respawn:-/bin/sh
    ::askfirst:-/bin/sh
    ::ctrlaltdel:/bin/umount -a -r
    # chmod 755 etc/inittab
    # cd dev
    # mknod console c 5 1
    # mknod null c 1 3
    # mknod tty1 c 4 1 

2.3 制作根文件系统镜像文件

在my_busybox/busybox/目录下,新建一个build_rootf.sh脚本文件,并运行build_rootf.sh脚本生成rootfs.img.gz

    #!/bin/bash
    rm -rf rootfs.ext3
    rm -rf fs
    dd if=/dev/zero of=./rootfs.ext3 bs=1M count=32
    mkfs.ext3 rootfs.ext3
    mkdir fs
    sudo mount -o loop rootfs.ext3 ./fs
    sudo cp -rf ./_install/* ./fs
    sudo umount ./fs
    gzip --best -c rootfs.ext3 > rootfs.img.gz

3. 搭建qemu运行环境

    # qemu依赖包 
    sudo apt-get install zlib1g-dev 
    sudo apt-get install libglib2.0-0 
    sudo apt-get install libglib2.0-dev 
    sudo apt-get install libtool 
    sudo apt-get install libsdl1.2-dev 
    sudo apt-get install libpixman-1-0 
    sudo apt-get install libpixman-1-dev 
    sudo apt-get install autoconf 
    # 安装qemu sudo apt install qemu-system

4. 运行命令:

    qemu-system-x86_64 \ 
    -kernel ~/Oh_linux5.10/kernel_linux_5.10/arch/x86_64/boot/bzImage \ 
    -initrd ~/my_busybox/busybox/rootfs.img.gz \ 
    -append "root=/dev/ram init=/linuxrc" \ 
    -serial file:output.txt

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐