ubuntu20.04 搭建kernel调试环境第二篇--制作rootfs

rootfs是linux的根文件系统,我们看到的 /目录及其中一些重要的子目录,比如/etc ,/lib,/sbin等等就是rootfs提供的,没有rootfs,linux就没法运行。

制作rootfs有两种方式:

1)通过buildroot制作rootfs(比较方便,建议用这种方式)

2)通过busybox制作rootfs(需要手动改很多地方,比较麻烦)。

----------------------------------------第一种方式    buildroot制作rootfs----------------------------------

1)下载buildroot并编译

root@linux:~#wget https://buildroot.org/downloads/buildroot-2020.02.8.tar.gz

root@linux:~#tar zxvf  buildroot-2020.02.8.tar.gz && cd buildroot-2020.02.8

root@linux:~#export ARCH=x86_64

root@linux:~#export FORCE_UNSAFE_CONFIGURE=1

root@linux:~#make menuconfig

Toolchain  --->
    # 编译一些package会用到,比如f2fstools
    [*] Enable WCHAR support

System configuration  --->
     # 系统启动后,密码为空,回车登录shell
     [*] Enable root login with password
          ( )    Root password
      # 设置eth0接口为DHCP,如果不设置,qemu启动kernel镜像后,需要手动配置网络
     (eth0) Network interface to configure through DHCP

Target packages  --->
    Filesystem and flash utilities  --->
        # 格式化f2fs用到
        [*] f2fs-tools

Filesystem images  ---> 
     [ ] ext2/3/4 root filesystem
     # 设置rootfs的文件系统类型
     [*] f2fs root filesystem

root@linux:~#make

编译时间较长,编译完成后,output/images目录中生成rootfs.f2fs文件,将该文件拷贝到内核源码目录即可,如下:

root@linux:/home/gsf/linux-5.10.3# ls| grep f2fs

rootfs.f2fs

2)一些注意的地方

      修改buildroot-2020.02.8/package目录下的package源码后,重新编译时,需要删除output/build/目录中对应的package,否则编译出来的rootfs.f2fs镜像不会包含改动。

-------------------------------------------第二种方式    busybox制作rootfs--------------------------------------

1)编译_install目录

root@linux:/home/gsf/busybox-1.33.0# export ARCH=arm
root@linux:/home/gsf/busybox-1.33.0# export CROSS_COMPILE=arm-linux-guneabi-
root@linux:/home/gsf/busybox-1.33.0# make menuconfig

Settings --> Build Options -->  [*] Build static binary (no shared libs)。
若编译成动态库库,需要将宿主机/bin、/sbin目录中的动态库文件拷贝到_install目录中。

root@linux:/home/gsf/busybox-1.33.0# make install

编译完成后,会在当前目录中生成_install目录,将其拷贝到linux源码根目录。

2)制作rootfs用到的文件

   a)将busybox的提供的example中的etc目录拷贝到_install中,,并稍作修改。

  root@linux:/home/gsf/debug/kernel/linux-5.10.3# cp ../busybox-1.33.0/examples/bootfloppy/etc ./_install/ -R

修改1:./_install/etc/inittab

     tty2::askfirst:-/bin/sh   --------->   ::askfirst:-/bin/sh

修改2:./_install/etc/fstab  增加下面3行

    sysfs /sys sysfs defaults 0 0

    tmpfs /dev tmpfs defaults 0 0

    tmpfs /tmp tmpfs defaults 0 0

修改3:./_install/etc/ini.d增加2行,注意顺序,改成下面的样子

#! /bin/sh

mkdir /proc  /sys  /tmp

/bin/mount -a

mdev -s

b) 在_install目录中创建系统必须的目录

    root@linux:/home/gsf/debug/kernel/linux-5.10.3/_install# mkdir dev mnt

c)在dev目录创建设备节点:

    mknod console c 5 1
    mknod null c 1 1

3)一些注意的地方

编译内核的时候,需要做以下设置:

make menuconfig

General setup --> Initial RAM filesystem and RAM disk (initramfs/initrd) support --> Initramfs source file(s)填入: _install

结语:

rootfs编译成功后,接着再编译kernel img,配合qeumu就可以运行kernel img了。

kernel的编译参考下一篇文章:ubuntu20.04 搭建kernel调试环境第三篇--kernel编译及运行_在qemu中运行f2fs-CSDN博客

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值