构建根文件系统

目录

前言

一、编译Busybox构建根文件系统

         1、修改Makefile,添加编译器

         2、取消BusyBox对中文的限制

         3、配置BusyBox

         4、编译BusyBox

         5、拷贝库文件

         6、 创建其他文件夹

二、根文件系统测试 

​三、完善根文件系统

总结



前言

通过视频教程学习Busybox构建根文件系统

一、编译Busybox构建根文件系统

        在nfs服务器目录下创建rootfs文件夹:        

         传输并解压缩BusyBox源码压缩文件        

         1、修改Makefile,添加编译器

        添加默认ARCH和CROSS_COMPILE的值如下图所示:

         2、取消BusyBox对中文的限制

         BusyBox默认对中文进行了限制,我们需要修改文件取消对中文的限制。打开busybox-
1.29.0/libbb/printable_string.c,找到函数 printable_string修改后如下图:

接着打开文件 busybox-1.29.0/libbb/unicode.c,修改内容如下图所示
 

         3、配置BusyBox

         通过图形化界面配置自己想要的功能:make menuconfig打开图形化界面菜单

        ①选项“Build static binary (no shared libs)”用来决定是静态编译 busybox 还是动态编译,静
态编译的话就不需要库文件,但是编译出来的库会很大。动态编译的话要求根文件系统中有库
文件,但是编译出来的 busybox 会小很多。这里我们不能采用静态编译!因为采用静态编译的
话 DNS 会出问题。

配置路径如下:
Location:
-> Settings
-> Build static binary (no shared libs) 不选中

继续配置如下路径配置项:

Location:
-> Settings
-> vi-style line editing commands 选中

 继续配置如下路径配置项:

Location:
-> Linux Module Utilities
-> Simplified modutils 不选中


 

继续配置如下路径配置项:

Location:
-> Linux System Utilities
-> mdev (16 kb) //确保下面的全部选中,默认都是选中的

最后就是使能 busybox 的 unicode 编码以支持中文,配置路径如下:
Location:
-> settings
-> support unicode  选中
-> Check $LC_ALL, $LC_CTYPE and $LANG environment variables  选中

          4、编译BusyBox

        使用命令 make install CONFIG_PREFIX=/home/zyc/linux/nfs/rootfs/,CONFIG_PREFIX=指定编译目录,编译到nfs服务器目录里。

           5、拷贝库文件

         由于BusyBox配置选的动态编译,需要添加相应的库文件。首先在rootfs目录下创建lib文件夹

利用命令将库文件拷贝到rootfs下的库中cp *so* *.a /home/zyc/linux/nfs/rootfs/lib/ -d

删除lib/目录下的ld-linux-armhf.so.3文件,并重新拷贝不加参数-d到rootfs/lib/目录下如图所示:

 利用命令将库文件拷贝到rootfs下的库中cp *so* *.a /home/zyc/linux/nfs/rootfs/lib/ -d

 再在rootfs/usr/目录下创建lib文件夹

 利用命令将库文件拷贝到rootfs下的库中cp *so* *.a /home/zyc/linux/nfs/rootfs/usr/lib -d

        6、 创建其他文件夹

二、根文件系统测试 

        为了方便测试,采用网络挂载根文件系统。

        ①linux内核网络驱动正常

        ②设置uboot的bootargs。也就是linux内核命令行参数

在uboot中设置参数

root=/dev/nfs nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>] ip=<client-ip>:<server-ip>:<gwip>:<netmask>:<hostname>:<device>:<autoconf>:<dns0-ip>:<dns1-ip>
<server-ip>:服务器 IP 地址,也就是存放根文件系统主机的 IP 地址,那就是 Ubuntu 的 IP
地址,比如我的 Ubuntu 主机 IP 地址为 192.168.1.250。
<root-dir>: 根文件系统的存放路径,比如我的就是/home/zuozhongkai/linux/nfs/rootfs。
<nfs-options>: NFS 的其他可选选项,一般不设置。
<client-ip>: 客户端 IP 地址,也就是我们开发板的 IP 地址, Linux 内核启动以后就会使用
此 IP 地址来配置开发板。此地址一定要和 Ubuntu 主机在同一个网段内,并且没有被其他的设
备使用,在 Ubuntu 中使用 ping 命令 ping 一下就知道要设置的 IP 地址有没有被使用,如果不能
ping 通就说明没有被使用,那么就可以设置为开发板的 IP 地址,比如我就可以设置为
192.168.1.251。
<server-ip>: 服务器 IP 地址,前面已经说了。
<gw-ip>: 网关地址,我的就是 192.168.1.1。
<netmask>:子网掩码,我的就是 255.255.255.0。
<hostname>:客户机的名字,一般不设置,此值可以空着。
<device>: 设备名,也就是网卡名,一般是 eth0, eth1….,正点原子的 I.MX6U-ALPHA 开
发板的 ENET2 为 eth0, ENET1 为 eth1。如果你的电脑只有一个网卡,那么基本只能是 eth0。
这里我们使用 ENET2,所以网卡名就是 eth0。
<autoconf>: 自动配置,一般不使用,所以设置为 off。
<dns0-ip>: DNS0 服务器 IP 地址,不使用。
<dns1-ip>: DNS1 服务器 IP 地址,不使用。

根据上面的格式 bootargs 环境变量的 root 值如下:

bootargs=console=ttymxc0,115200 rw root=/dev/nfs nfsroot=192.168.10.100:/home/zyc/linux/nfs/rootfs ip=192.168.10.101:192.168.10.100:192.168.10.1:255.255.255.0::eth0:off,v3

最后成功挂载根文件系统,如图

三、完善根文件系统

        ①创建rcS脚本

        rcS 是规定启动哪些文件的脚本文件。在 rootfs 中创建/etc/init.d/rcS 文件,然后在 rcS 中输入如下所示内容:

  1 #!/bin/sh
  2 PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH
  3 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib:/usr/lib
  4 export PATH LD_LIBRARY_PATH
  5 mount -a
  6 mkdir /dev/pts
  7 mount -t devpts devpts /dev/pts
  8 echo /sbin/mdev > /proc/sys/kernel/hotplug
  9 mdev -s

       ②/etc/fstab 文件
        在 rootfs 中创建/etc/fstab 文件, fstab 在 Linux 开机以后自动配置哪些需要自动挂载的分区,格式如下:

  1 #<file system> <mount point> <type> <options> <dump> <pass>
  2 proc /proc proc defaults 0 0
  3 tmpfs /tmp tmpfs defaults 0 0
  4 sysfs /sys sysfs defaults 0 0

        ③ 创建/etc/inittab 文件

创建一个/etc/inittab,在里面输入如下内容:

  1 #etc/inittab
  2 ::sysinit:/etc/init.d/rcS
  3 console::askfirst:-/bin/sh
  4 ::restart:/sbin/init
  5 ::ctrlaltdel:/sbin/reboot
  6 ::shutdown:/bin/umount -a -r
  7 ::shutdown:/sbin/swapoff -a

至此根文件系统构建完毕

总结

一步一步来

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
buildroot是一种用于构建文件系统的工具。它可以帮助我们处理文件系统的各种细节,使得文件系统更加合理和有效。相比于使用busybox构建文件系统buildroot可以更好地满足产品开发的需求,因为它处理了很多不完善和容易忽略的细节。因此,在做产品时,推荐使用buildroot来构建文件系统。当然,还有其他类似的软件,比如yocto,也可以用来构建文件系统。\[1\] 使用buildroot构建文件系统相比于使用busybox,它更加完整,不需要我们自行添加很多东西,比如库文件。在驱动开发中,很多第三方软件也需要我们自己进行移植,而这些软件往往依赖其他的库文件,导致移植过程非常繁琐。因此,使用buildroot可以简化这个过程。\[2\] 需要注意的是,使用buildroot构建文件系统可能是最简单的,没有配置任何第三方的库和软件。但是,我们可以通过配置buildroot来使能一些常见的第三方软件,从而满足我们的需求。\[3\] #### 引用[.reference_title] - *1* *2* *3* [Buildroot文件系统构建](https://blog.csdn.net/lengyuefeng212/article/details/119848347)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值