构建linux根文件系统

所谓制作根文件系统,就是创建各种目录,并且在里面创建各种文件。比如在/bin、/sbin目录下存放各种可执行程序,在/etc目录下存放配置文件,在/lib目录下存放库文件。本文档基于BusyBox来介绍如何制作根文件系统。

1. BusyBox下载

BusyBox源码下载地址:https://busybox.net/,可根据需求下载合适的版本,例如BusyBox 1.25.0。

2. 解压BusyBox

2.1.把下载好的busybox-1.25.0.tar.bz2拷贝到共享目录下,再拷贝到linux的一个目录下。

2.2. 使用命令tar -xjvf busybox-1.25.0.tar.bz2 解压

3. 配置BusyBox

BusyBox的配置程序和Linux内核菜单配置方式简直一模一样,十分方便易用。使用make menuconfig命令就可以进行配置。

3.1. 设置交叉编译器

进入busybox-1.25.0目录,修改Makefile如下红色字体

cd busybox-1.25.0/

vim Makefile

ARCH ?= arm

CROSS_COMPILE ?=  arm-linux- 

3.2.使用菜单配置BusyBox

make menuconfig

3.2.1.选择Busybox Settings--->Build Options--->,选择[*] Build Busybox as a static binary(no shared libs)

这个选项是一定要选择的,这样才能把BusyBox编译成静态链接的可执行文件,运行时才独立于其他函数库,否则必须要其他库文件才能运行。

3.2.2.选择Busybox Settings---> General Configuration  --->[*] Don't use /usr

这个选项也是要选上的,否则make install 后BusyBox将安装在原系统的/usr下,这将覆盖系统原有的命令。选择这个选项后,make install后会在BusyBox目录下生成一个叫_install的目录,里面有BusyBox和指向他的链接。

3.2.3.去掉Linux System Utilities—> [ ] nsenter

3.2.4.去掉Coreutils  ---> [ ] sync

4. 编译安装

默认情况下,make install完成后会在BusyBox目录下创建一个新的本地子目录 _install,其中包含了基本的 Linux 环境。在这个目录中,会有一个链接到 BusyBox 的 linuxrc 程序。这个 linuxrc 程序在构建安装盘或急救盘(允许提前进行模块化的引导)时非常有用。同样在这个目录中,还有一个包含操作系统二进制文件的 /sbin 子目录。还有一个包含用户二进制文件的 /bin 目录。在构建软盘发行版或嵌入式初始 RAM 磁盘时,可以将这个 _install 目录迁移到目标环境的根目录中。

4.1.编译

make

make过程中出现了错误,错误信息如下图

解决方法:将/usr/include/mtd/mtd-abi.h拷贝到busybox的include文件中,并把头文件添加到miscutils/nandwrite.c文件中,操作如下:

cp /usr/include/mtd/mtd-abi.h ./include/

vim miscutils/nandwrite.c(修改如下图)

保存后,继续make,还是出现错误,错误信息如下。

 

解决方法:/usr/include/linux/fs.h拷贝到busybox的include文件中,不过这次还要额外修改一下文件中的部分内容,否则会出现编译失败。

cp /usr/include/linux/fs.h ./include/

修改include/fs.h文件,修改如下:

vim include/fs.h

1. 屏蔽4个头文件(如下图)

2. 屏蔽以下结构体(如下图)

3. 修改util-linux/blkdiscard.c(如下图)

保存后,继续make,编译通过。

 

4.2.安装

make install

安装成功之后,会在当前目录下生成新的目录_install(如下图)

5. 制作完整的根文件系统

BusyBox虽然为我们创建了Linux根系统中最基本的shell和一些常用命令,但是一个根文件系统还不只包含这些,还需要其它的一些内容。

5.1. 在PC上创建一个目标根文件系统的目录,并把BusyBox里的_install目录里所有内容复制到这个目录下

mkdir rootfs

cp -ra busybox/busybox-1.25.0/_install/* rootfs/

cd rootfs/

5.2.在rootfs下创建目录

mkdir dev etc lib usr var proc tmp home root mnt sys

在var目录下创建tmp,modules,run,log目录

cd var

mkdir tmp modules run log

5.3.完善rootfs/etc目录

拷贝busybox/busybox-1.25.0/examples/bootfloppy/etc/*到rootfs/etc目录下

cp -r ../busybox/busybox-1.25.0/examples/bootfloppy/etc/* etc

5.3.1.修改inittab

vim etc/inittab(修改如下)

赋予其可执行属性:chmod a+x ./etc/inittab

 

5.3.2. etc目录下创建passwd和group文件

5.3.2.1.创建passwd

vim etc/passwd

内容如下:

root::0:0:root:/:/bin/sh

ftp::14:50:FTP User:/var/ftp:

bin:*:1:1:bin:/bin:

5.3.2.2.创建group

vim etc/group

内容如下:

root:*:0:

daemon:*:1:

bin:*:2:

sys:*:3:

adm:*:4:

tty:*:5:

disk:*:6:

lp:*:7:lp

mail:*:8:

news:*:9:

uucp:*:10:

proxy:*:13:

kmem:*:15:

dialout:*:20:

fax:*:21:

voice:*:22:

cdrom:*:24:

floppy:*:25:

tape:*:26:

sudo:*:27:

 

5.3.3. 修改profile文件

vim etc/profile (添加以下内容)

 

USER="`id -un`"

LOGNAME=$USER

PS1='[\u@\h \W]\$'

PATH=$PATH

HOSTNAME=`/bin/hostname`

export USER LOGNAME PS1 PATH 

5.3.4.修改 etc/init.d/rcS文件

vim etc/init.d/rcS(添加以下内容)

 

export PATH=/sbin:/bin:/usr/sbin:/usr/bin:$PATH

 

hostname mini2440

mount -a

mkdir -p /dev/pts

mount -t devpts devpts /dev/pts

echo /sbin/mdev > /proc/sys/kernel/hotplug

mdev -s

 

######开启telnetd服务#########

telnetd -l /bin/login

#######配置网络###############

ifconfig lo 127.0.0.1 netmask 255.0.0.0

ifconfig eth0 192.168.0.210 netmask 255.255.255.0 up

route add default gw 192.168.0.1 eth0

5.3.5.修改etc/fstab文件

vim etc/fstab(添加以下内容)

#device  mount-point  type       option      dump  fsck  order

proc     /proc        proc       defaults     0      0

tmpfs    /tmp        tmpfs      defaults     0      0

mdev    /dev         tmpfs      defaults     0      0

sysfs     /sys         sysfs       defaults     0      0

5.3.6. 建立etc/mdev.conf (mdev设备配置文件)、 net.conf (网络配置文件件)和mime.types: MIME(Multipurpose Internet Mail Extensions) ,内容均为空

5.4.rootfs/dev目录下创建设备节点

cd dev

sudo mknod console c 5 1

sudo mknod null c 1 3

5.5.完善rootfs/lib目录

对于"lib"目录:这个里面放的都是库文件,直接从交叉编译器的库文件目录中拷贝过来

cp -af ../software/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/lib/*so* lib/

 

6. 制作根文件系统镜像

将制作根文件系统通过mkyaffs2image工具制作成yaffs文件系统映像文件,然后烧录到nand flash中。这里按照友善之臂的官方推荐,使用mkyaffs2image工具,首先将光盘里的mkyaffs2image.tgz解压出来。进入到mkyaffs2image.tgz所在的目录,然后使用下面的命令:

tar -vxzf mkyaffs2image.tgz

解压成功会出现mkyaffs2image和mkyaffs2image-128M两个文件,其中第一个mkyaffs2image是制作适用于NANDFLASH为64M版本文件系统映象的工具,mkyaffs2image-128M则是 制作适用于128M/256M/512M/1GB版本文件系统映象的工具。

然后使用mkyaffs2image打包制作好的根文件系统即可:

最后将生成的镜像文件rootfs.img拷贝到Windows共享目录下

7. 下载烧写镜像文件

打开tftpboot工具把rootfs.img下载到板子

tftp 0x32000000 rootfs.img //把rootfs.img文件下载到内存0x32000000地址

擦除rootfs分区

nand erase.part rootfs

烧写rootfs.img文件

nand write.yaffs2 0x32000000 rootfs 0xb83d40 (0x32000000:存放下载文件的内存地址, 0xb83d40:文件大小)

重启开发板,就可以进入到根文件系统(如下图)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值