x4412最小根文件系统制作

1 . 根文件系统制作
可以从 http://busybox.net/downloads/

运行 Ubuntu 14.04 系统,打开命令行终端:
$ cd ~
$ mkdir busybox
$ cd busybox
解压下载的busybox1.25(根据自己选择下载文件)
$ tar xvf busybox-1.25.0.tar.bz2
//解压源码
$ cd  busybox-1.25.0
配置 busybox 源码:
$ make menuconfig
Busybox Settings --->
Build Options --->
	[*] Build BusyBox as a static binary (no shared libs)
	[ ] Force NOMMU build
	[ ] Build with Large File Support (for accessing files > 2 GB)
		(arm-none-linux-gnueabi-) Cross Compiler prefix
		() Additional CFLAGS

修改最顶层目录下的Makefiel
$ vim Makefile
 修改为如下内容
 ARCH  ?= arm
 CROSS_COMPILE ?= arm-none-linux-gnueabi-
编译源码:
$ make
安装:
busybox 默认安装路径为源码目录下的_install
$ make install
进入安装目录:
$ cd _install
$ ls
bin linuxrc sbin usr
创建其他需要的目录:
$ mkdir dev etc mnt proc var tmp sys root
添加库:
将工具链中的库拷贝到_install 目录下:
$ cp /home/linux/toolchain/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/lib/ . -a
删除静态库和共享库文件中的符号表:
$ sudo rm lib/*.a
# arm-none-linux-gnueabi-strip lib/*.so (超级用户下执行命令)
删除不需要的库,确保所有库大小不超过 4M:
$ du -mh lib/
添加系统启动文件:
在 etc 下添加文件 inittab,文件内容如下:
#this is run first except when booting in single-user mode.
::sysinit:/etc/init.d/rcS
# /bin/sh invocations on selected ttys
# start an "askfirst" shell on the console (whatever that may be)
::askfirst:-/bin/sh
# stuff to do when restarting the init process
::restart:/sbin/init
# stuff to do before rebooting
::ctrlaltdel:/sbin/reboot

在 etc 下添加文件 fstab ,文件内容如下:
#device   mount-point  type     options     dump   fsck order
proc       /proc        proc    defaults      0        0
tmpfs      /tmp         tmpfs   defaults      0        0
sysfs      /sys         sysfs   defaults      0        0
tmpfs      /dev         tmpfs   dafaults      0        0

这里我们挂载的文件系统有三个 proc、sysfs 和 tmpfs 。在内核中 proc 和 sysfs 默认都支持,而
tmpfs 是没有支持的,我们需要添加 tmpfs 的支持
修改 Linux 内核配置;
$ cd ~/ kernel/linux-4.9.123
$ make menuconfig
File systems --->
	Pseudo filesystems --->
		[*] Virtual memory file system support (former shm fs)
		[*] Tmpfs POSIX Access Control Lists
重新编译内核:
$ make uImage
$ cp arch/arm/boot/uImage /tftpboot
回到创建的文件系统处,在etc下创建init.d目录,并在init.d下创建rcS文件,rcS文件内容为:
#!/bin/sh
# This is the first script called by init process
/bin/mount   -a
echo /sbin/mdev  >  /proc/sys/kernel/hotplug
/sbin/mdev   -s

为 rcS 添加可执行权限:
$ chmod +x init.d/rcS

在 etc 下添加 profile 文件,文件内容为:
#!/bin/sh
export HOSTNAME=x4412
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

至此根文件目录已经制作完成。当然如果要使用emmc或sd进行启动需要将其制作成镜像文件ext2或ext4等,然后写入硬盘分区。
下面描述一下制作ext4格式镜像文件,rootfs.img,其大小为16MB。具体步骤如下: 
1、#:mkdir rootfs_tmp #创建挂载临时文件目录
2、利用dd指令和mkfs.ext4创建ext4镜像文件
	#:dd if=/dev/zero of=rootfs.img bs=1024 count=16000
	#:mkfs.ext4 rootfs.img
3、挂载镜像文件到临时目录中
	#:mount -o loop rootfs.img rootfs_tmp/
4、将rootfs里的最小文件系统文件拷贝到临时目录里
	#:cp -rf rootfs/* rootfs_tmp/
5、卸载临时目录,完成镜像制作
	#:umount rootfs_tmp/



1 . 根文件系统制作
可以从 http://busybox.net/downloads/

运行 Ubuntu 14.04 系统,打开命令行终端:
$ cd ~
$ mkdir busybox
$ cd busybox
解压下载的busybox1.25(根据自己选择下载文件)
$ tar xvf busybox-1.25.0.tar.bz2
//解压源码
$ cd  busybox-1.25.0
配置 busybox 源码:
$ make menuconfig
Busybox Settings --->
Build Options --->
	[*] Build BusyBox as a static binary (no shared libs)
	[ ] Force NOMMU build
	[ ] Build with Large File Support (for accessing files > 2 GB)
		(arm-none-linux-gnueabi-) Cross Compiler prefix
		() Additional CFLAGS

3.1编译之前首先修改Makefiel,使用交叉编译器

$vim Makefile

 ARCH  ?= arm

 CROSS_COMPILE ?= arm-none-linux-gnueabi-
编译源码:
$ make
安装:
busybox 默认安装路径为源码目录下的_install
$ make install
进入安装目录:
$ cd _install
$ ls
bin linuxrc sbin
usr
创建其他需要的目录:
$ mkdir dev etc mnt proc var tmp sys root
添加库:
将工具链中的库拷贝到_install 目录下:
$ cp /home/linux/toolchain/gcc-4.6.4/arm-arm1176jzfssf-linux-gnueabi/lib/ . -a
删除静态库和共享库文件中的符号表:
$ sudo rm lib/*.a
# arm-none-linux-gnueabi-strip lib/*.so (超级用户下执行命令)
删除不需要的库,确保所有库大小不超过 4M:
$ du -mh lib/
添加系统启动文件:
在 etc 下添加文件 inittab,文件内容如下:
#this is run first except when booting in single-user mode.
::sysinit:/etc/init.d/rcS
# /bin/sh invocations on selected ttys
# start an "askfirst" shell on the console (whatever that may be)
::askfirst:-/bin/sh
# stuff to do when restarting the init process
::restart:/sbin/init
# stuff to do before rebooting
::ctrlaltdel:/sbin/reboot
在 etc 下添加文件 fstab ,文件内容如下:
#device   mount-point  type     options     dump   fsck order
proc       /proc        proc    defaults      0        0
tmpfs      /tmp         tmpfs   defaults      0        0
sysfs      /sys         sysfs   defaults      0        0
tmpfs      /dev         tmpfs   dafaults      0        0


这里我们挂载的文件系统有三个 proc、sysfs 和 tmpfs 。在内核中 proc 和 sysfs 默认都支持,而
tmpfs 是没有支持的,我们需要添加 tmpfs 的支持
修改 Linux 内核配置;
$ cd ~/ kernel/linux-4.9.123
$ make menuconfig
File systems --->
	Pseudo filesystems --->
		[*] Virtual memory file system support (former shm fs)
		[*] Tmpfs POSIX Access Control Lists
重新编译内核:
$ make uImage
$ cp arch/arm/boot/uImage /tftpboot
回到创建的文件系统处,在etc下创建init.d目录,并在init.d下创建rcS文件,rcS文件内容为:
#!/bin/sh
# This is the first script called by init process
/bin/mount   -a
echo /sbin/mdev  >  /proc/sys/kernel/hotplug
/sbin/mdev   -s

为 rcS 添加可执行权限:
$ chmod +x init.d/rcS

在 etc 下添加 profile 文件,文件内容为:
#!/bin/sh
export HOSTNAME=x4412
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


制作ext4格式镜像文件,rootfs.ext4,其大小为16MB。 

1、#:mkdir rootfs_tmp #创建挂载临时文件目录

2、利用dd指令和mkfs.ext4创建ext4镜像文件

	#:dd if=/dev/zero of=rootfs.img bs=1024 count=16000

	#:mkfs.ext4 rootfs.img

3、挂载镜像文件到临时目录中

	#:mount -o loop rootfs.img rootfs_tmp/

4、将rootfs里的最小文件系统文件拷贝到临时目录里
	#:cp -rf rootfs/* rootfs_tmp/

5、卸载临时目录,完成镜像制作

	#:umount rootfs_tmp/

你可能感兴趣的:(linux)