暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

一起撸linux内核30-构建文件系统并使用qemu挂载起来

囧囧妹 2022-07-04
224

点击上方蓝字【囧囧妹】一起学习,一起成长!

一、开篇

接上一节一起撸linux内核29-编译内核并使用qemu运行起来,现在构建文件系统

二、下载编译busybox

在上一节的tftpboot目录下创建filesystem目录,在filesystem中通过wget https://busybox.net/downloads/busybox-1.35.0.tar.bz2下载busybox。

    mkdir filesystem
    cd filesystem/
    wget https://busybox.net/downloads/busybox-1.35.0.tar.bz2
    tar -xvf busybox-1.35.0.tar.bz2 
    cd busybox-1.35.0

    进入busybox目录,修改根目录Makefile如下:

    执行make menuconfig进行配置:
        • Settings —-> [*] vi-style line editing commands (New)

        • Settings —-> Destination path for ‘make install’

    保存退出,执行make install -j2

    安装完成后如下:

    这里我在paralles里使用的mac的目录,所以在创建设备节点时出现了操作不允许,我将nfs拷贝到ubuntu的/home/下继续完成整个根文件系统的构建。
      cd home/parallels/
      mkdir nfs
      chmod +777 nfs/
      cd nfs/
      cp usr/arm-linux-gnueabi/lib/*.so* ./lib/ -d
      cd dev/
      mknod -m 666 tty1 c 4 1
      mknod -m 666 tty2 c 4 2
      mknod -m 666 tty3 c 4 3
      mknod -m 666 tty4 c 4 4
      mknod -m 666 console c 5 1
      mknod -m 666 null c 1 3
      cd ..
      mkdir -p etc/init.d
      cd etc/init.d/
      vim rcS
      在rcS文件中填充如下
        #!/bin/sh
        PATH=/bin:/sbin:/usr/bin:/usr/sbin
        export LD_LIBRARY_PATH=/lib:/usr/lib
        /bin/mount -n -t ramfs ramfs var
        /bin/mount -n -t ramfs ramfs tmp
        /bin/mount -n -t sysfs none sys
        /bin/mount -n -t ramfs none dev
        /bin/mkdir var/tmp
        /bin/mkdir var/modules
        /bin/mkdir var/run
        /bin/mkdir var/log
        /bin/mkdir -p dev/pts
        /bin/mkdir -p dev/shm
        /sbin/mdev -s
        /bin/mount -a
        echo "-----------------------------------"
        echo "*****welcome to vexpress board*****"
        echo "-----------------------------------"
        保存退出
          cd ..
          vim fstab
          在fstab文件中填充:
            proc    /proc           proc    defaults        0       0
            none /dev/pts devpts mode=0622 0 0
            mdev /dev ramfs defaults 0 0
            sysfs /sys sysfs defaults 0 0
            tmpfs /dev/shm tmpfs defaults 0 0
            tmpfs /dev tmpfs defaults 0 0
            tmpfs /mnt tmpfs defaults 0 0
            var /dev tmpfs defaults 0 0
            ramfs /dev ramfs defaults 0 0
            保存退出,继续在当前etc目录下:
              vim inittab
              inittab中填充如下:
                ::sysinit:/etc/init.d/rcS
                ::askfirst:-/bin/sh
                ::ctrlaltdel:/bin/umount -a -r
                保存退出,继续在当前etc目录下:
                  vim profile
                  在profile中填充如下:
                    USER="root"
                    LOGNAME=$USER
                    export HOSTNAME=`cat /etc/sysconfig/HOSTNAME`
                    export USER=root
                    export HOME=/root
                    export PS1="[$USER@$HOSTNAME \W]\# "
                    PATH=/bin:/sbin:/usr/bin:/usr/sbin
                    LD_LIBRARY_PATH=/lib:/usr/lib:$LD_LIBRARY_PATH
                    export PATH LD_LIBRARY_PATH
                    保存退出,在当前etc下:
                      mkdir sysconfig
                      cd sysconfig
                      vim HOSTNAME
                      在HOSTNAME中填充vexpress,保存退出,返回nfs目录,
                        cd ../../    #返回到nfs目录
                        mkdir mnt proc root sys tmp var


                        三、打包构建好的文件系统并挂载

                          cd /home/  
                          mkdir temp
                          dd if=/dev/zero of=rootfs.ext3 bs=1M count=32
                          mkfs.ext3 rootfs.ext3
                          mount -t ext3 rootfs.ext3 temp/ -o loop
                          cp -r parallels/nfs/* temp/
                          umount temp/
                          mv rootfs.ext3 /media/psf/Home/linux/tftpboot/
                          cd /media/psf/Home/linux/tftpboot/ 
                          vim start.sh 
                          在start.sh中添加如下:
                            qemu-system-arm \
                            -M vexpress-a9 \
                            -m 512M \
                            -kernel zImage \
                            -dtb vexpress-v2p-ca9.dtb \
                            -nographic \
                            -append "root=/dev/mmcblk0 rw console=ttyAMA0" \
                            -sd rootfs.ext3
                            保存退出,source start.sh启动qemu。

                            可以看到我们通过上一节的qemu启动内核后挂载成功了文件系统:



                            觉得不错,点击“分享”,“赞”,“在看”传播给更多热爱嵌入式的小伙伴吧!

                            文章转载自囧囧妹,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                            评论