欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

第5章 文件系统移植(busybox1.28.3)

程序员文章站 2022-05-03 09:16:17
...

【注】本文所用的开发吧是IMX283,其他开发板移植也是类似,只是交叉工具链不同。
1.下载busybox
下载地址:http://www.busybox.net/(当前最新的稳定版本busybox-1.28.3)
笔者用的是busybox-1.28.3。下载并解压busybox-1.28.3.tar.bz2:

$tar -xvf busybox-1.28.3.tar.bz2

2.配置编译busybox
1)进入busybox解压后的目录

$ cd ./busybox-1.28.3/

2)修改Makefile

$ vi Makefile

添加如下内容:
ARCH = arm
CROSS_COMPILE= arm-fsl-linux-gnueabi-
第5章 文件系统移植(busybox1.28.3)
【注】根据开发板的型号选择相应开发工具。
3)make menuconfig

$ make menuconfig

第5章 文件系统移植(busybox1.28.3)
Settings —> Support –long-options —> [*] Don’t use /usr
第5章 文件系统移植(busybox1.28.3)
Settings —>Build Options —> [*] Build static binary (no shared libs) //这里编译成静态.
第5章 文件系统移植(busybox1.28.3)
Settings —>Build Options —> () Cross Compiler prefix //这里可以指定编译器arm-fsl-linux-gnueabi-,由于我们在makefile写了,这里就不需要填。
第5章 文件系统移植(busybox1.28.3)
Settings —>Build Options —> InstallationOptions (“make install” behavior) —> (./_install) BusyBoxinstallation prefix //这里填写根文件安装的路径,默认是当前文件夹下的_install
第5章 文件系统移植(busybox1.28.3)
Settings —>Busybox Library Tuning —>[*] Username completion //用户名,环境变量相关
Settings —>Busybox Library Tuning —>[*] Fancy shell prompts
第5章 文件系统移植(busybox1.28.3)
4)make

$make

第5章 文件系统移植(busybox1.28.3)
5)make install //拷贝制作好的根文件到安装目录,可以看到生成3个文件目录。

$ make install
$ls _install

第5章 文件系统移植(busybox1.28.3)
【注】bin 和sbin目录下生成的是常用shell命令和工具等,linuxrc 是启动文件。

3.创建根文件目录
【注】以下步骤要切换到root用户。

$cd root
$mkdir rootfs
$cd rootfs
$mkdir bin dev etc libproc sbin sys usr mnt tmp var root
$mkdir –p usr/bin usr/libusr/sbin lib/modules

4.拷贝busybox编译生成的3个文件目录到rootfs (busybox只生成3个文件目录 bin linuxrc sbin)

$cp _install/* -rf  /root/rootfs

5.拷贝c运行库
拷贝我们开发板的交叉编译工具lib目录:

$cd /opt/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/arm-fsl-linux-gnueabi/multi-libs/lib
$cp *so* /root/rootfs/lib -d    //-d 表示把链接关系原封不动拷贝 

【注】以下两个步骤是选配。
6.剪裁链接库的大小。去除LIB的符号表。

$cd /root/rootfs/lib
$arm-fsl-linux-gnueabi-strip *.so

7.在rootfs/dev/下创建设备节点,这2个设备节点是初始化必须的设备:

$mknod -m 660 null c 1 3
$mknod -m 660 console c 5 1

8. rootfs/etc/的初始化配置脚本修改
1)拷贝busybox-1.28.3/examples/bootfloopy/etc/*到当前目录下

$cp -r  busybox-1.28.3/examples/bootfloopy/etc/*  /root/rootfs/etc

包括文件:fstab init.d inittab profile

2)修改iniitab文件:

$vi etc/inittab
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::ctrlaltdel:/bin/umount  -a  -r

3)修改etc/fstab文件

proc     /proc proc defaults 0 0
tmpfs    /tmp tmpfs defaults 0 0
sysfs    /sys sysfs defaults 0 0
tmpfs   /dev tmpfs defaults 0 0

4)修改init.d/rcS文件

#! /bin/sh
ifconfig eth0 192.168.2.201
/bin/mount -a
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev  –s

5)修改profile文件
这里可以配置用户名等信息,不是必须的,暂时不配。
9.根文件系统基本制作完成。可以通过nfs挂载了验证是否正确。
这里我们通过tftp升级uImage,nfs网络文件系统挂载rootfs.
前提,确保配置好了nfs,和 tftp
MX28 U-Boot > setenv serverip 192.168.2.200
MX28 U-Boot > setenv ipaddr 192.168.2.201
MX28 U-Boot >setenv bootargs root=/dev/nfs nfsroot=192.168.2.200:/root/rootfsip=192.168.2.201 init=/sbin/init console=ttyAM0,115200n8
//MX28 U-Boot > run settftpboot
//MX28 U-Boot > saveenv
MX28 U-Boot > tftp 0x41600000 uImage
MX28 U-Boot > bootm

启动后,即可看到自己的文件系统啦!

【编译出现的问题】

问题1 busybox error: ‘MTD_FILE_MODE_RAW’
编译busybox-1.28.3时出错:
miscutils/nandwrite.c: In function ‘nandwrite_main’:
miscutils/nandwrite.c:151:3: error: ‘MTD_FILE_MODE_RAW’ undeclared (first use in this function)
miscutils/nandwrite.c:151:3: note: each undeclared identifier is reported only once for each function it appears in
第5章 文件系统移植(busybox1.28.3)
解决办法:
【方法一】
mtd/mtd-abi.h里面有定义。于是定位到我的工具链的该文件:
sudo updatedb
sudo locate mtd-abi.h

cat /查找结果的工具链路径/include/mtd/mtd-abi.h
发现有定义

 /*
  * Read/write file modes for access to MTD
  */
 enum mtd_file_modes {
         MTD_MODE_NORMAL = MTD_OTP_OFF,
         MTD_MODE_OTP_FACTORY = MTD_OTP_FACTORY,
         MTD_MODE_OTP_USER = MTD_OTP_USER,
         MTD_MODE_RAW,
 };

#include < mtd/mtd-abi.h>
第5章 文件系统移植(busybox1.28.3)
修改busybox nandwrite.c:147 ‘MTD_FILE_MODE_RAW’ -> ‘MTD_MODE_RAW’
第5章 文件系统移植(busybox1.28.3)

【方法二】
make menuconfig 去掉 nandwrite模块即可。
问题2 busybox error:undefined reference to `setns’/’syncfs’
第5章 文件系统移植(busybox1.28.3)

$make menuconfig

Linux System Utilities—>nsenter,去掉该选项.
第5章 文件系统移植(busybox1.28.3)
Coreutils—>sync选项去掉.
第5章 文件系统移植(busybox1.28.3)

相关标签: 文件系统移植