| 
												
						
						
												1#
						发表于 2015-06-30 09:49:33 
															
	Linux中Root Filesystem(根文件系统)是必不可少的,常用的是BusyBox,本节就介绍一下使用BusyBox制作Linux根文件系统rootfs,主要参考xilinx wiki上Zynq Root FileSystem Creation方法:http://wiki.xilinx.com/zynq-rootfs
 
	1. 准备工作:
 
	首先在Ubuntu中建立ARM GNU交叉编译环境,笔者使用的是Ubuntu11.04平台。
 
	
 
		通过Git下载BusyBox:
	 
		git clone git://git.busybox.net/busybox
	 
		
		
			2. 编译安装BusyBox
		 
			cd busybox在Ubuntu平台中进入BusyBox,进行初始化默认配置:
 make defconfig
 自定义配置BusyBox,会弹出图形界面设置窗口,如图1所示
 
		make menuconfig
	 
		 进入BusyBox Settings->Installation Options->BusyBox installationprefix设置BusyBox的安装目录,将其设置为/home/devel/_rootfs,如图2所示。 
		 完成配置后,输入以下脚本安装BusyBox: 
		make install
	 
		在设置的目录中会生成rootfs,其中包含了bin、sbin、usr/bin和usr/sbin 目录,其下包含了我们常用的命令,这些命令都是指向bin/busybox的软链接,如图3所示。  
			3. 编译安装Dropbear
		 
			Dropbear提供支持SSH客户端/服务器功能。
 
			wget http://matt.ucc.asn.au/dropbear/releases/dropbear-0.53.1.tar.gz从Dropbear网站上下载Dropbear,并解压
 tar xfvz dropbear-0.53.1.tar.gz
 cd dropbear-0.53.1
 配置Dropbear:
 
		./configure --prefix=/home/devel/_rootfs --host=arm-xilinx-linux-gnueabi --disable-zlib CC=arm-xilinx-linux-gnueabi-gcc LDFLAGS="-Wl,--gc-sections" CFLAGS="-ffunction-sections -fdata-sections -Os"
 
		编译Dropbear:
	 
		make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" MULTI=1 strip
	 
		安装Dropbear,并且在rootfs中建立链接,如图4所示为生成的scp
	 
		sudo make installln -s ../../sbin/dropbear /home/devel/_rootfs/usr/bin/scp
 
   
			4. 工具链和应用程序配置
 
			需要将Xilinx ARM工具链的库拷贝到rootfs中的lib文件夹下,由于笔者没有在Ubuntu平台上安装ISE套件,因此从Windows平台上拷贝,在Windows平台上的位置:*:\Xilinx\14.2\ISE_DS\EDK\gnu\arm\nt\arm-xilinx-linux-gnueabi\libc\lib
 
			然后将libc/sbin和libc/usr/bin中的文件也拷贝进去。
 
 
			5. 其它目录生成和配置
 
			mkdir dev etc etc/dropbear etc/init.d mnt opt proc root sys tmp var var/log var/wwwrootfs中还需要创建其它目录,如下脚本:
   
			创建etc/fstab文件:sudo gedit etc/fstab,文件内容如下:
		 
 
			
				复制代码
					
						LABEL=/    /           tmpfs   defaults        0 0
						none       /dev/pts    devpts  gid=5,mode=620  0 0
						none       /proc       proc    defaults        0 0
						none       /sys        sysfs   defaults        0 0
						none       /tmp        tmpfs   defaults        0 0
					 
 
			创建etc/inittab文件:sudo gedit etc/inittab,文件内容如下:
		 
 
			
				复制代码
					
						::sysinit:/etc/init.d/rcS
						
						# /bin/ash
						# 
						# Start an askfirst shell on the serial ports
						
						ttyPS0::respawn:-/bin/ash
						
						# What to do when restarting the init process
						
						::restart:/sbin/init
						
						# What to do before rebooting
						
						::shutdown:/bin/umount -a –r
					 
 
			创建etc/ passwd文件:sudo gedit etc/passwd,文件内容如下:
		 
			
 
			
				复制代码
					
						root:$1$qC.CEbjC$SVJyqm.IG.gkElhaeM.FD0:0:0:root:/root:/bin/sh
					 创建etc/init.d/rcS文件:sudo gedit etc/init.d/rcS,文件内容如下:
 
			
 
 
			
				复制代码
					
						#!/bin/sh
						
						echo "Starting rcS..."
						
						echo "++ Mounting filesystem"
						mount -t proc none /proc
						mount -t sysfs none /sys
						mount -t tmpfs none /tmp
						
						echo "++ Setting up mdev"
						
						echo /sbin/mdev > /proc/sys/kernel/hotplug
						mdev -s
						
						mkdir -p /dev/pts
						mkdir -p /dev/i2c
						mount -t devpts devpts /dev/pts
						
						echo "++ Starting telnet daemon"
						telnetd -l /bin/sh
						
						echo "++ Starting http daemon"
						httpd -h /var/www
						
						echo "++ Starting ftp daemon"
						tcpsvd 0:21 ftpd ftpd -w /&
						
						echo "++ Starting dropbear (ssh)daemon"
						dropbear
						
						echo "rcS Complete"
					 
 
			设置etc/init.d/rcS的权限:
 
 
			
				复制代码
					
						chmod 755 etc/init.d/rcS
						sudo chown root:root etc/init.d/rcS
					 
 
			到这一步,rootfs目录算是创建完成了
 
 
			6. 生成ramdisk镜像文件
 
			rootfs想要被识别,需要将其制作成镜像image文件,并且压缩。如下脚本为创建image文件:
 
 
			
				复制代码
					
						cd ~
						dd if=/dev/zero of=ramdisk8M.image bs=1024 count=8192
						mke2fs -F ramdisk8M.image -L "ramdisk" -b 1024 -m 0
						tune2fs ramdisk8M.image -i 0
						chmod 777 ramdisk8M.image
					 
 
			新建一个ramdisk目录,然后将ramdisk8M.image加载到该目录下:
 
 
			
				复制代码
					
						mkdir ramdisk
						mount -o loop ramdisk8M.image ramdisk/
					 
 
			将_rootfs/目录下的文件拷贝到ramdisk中:
 
			
 
			
				复制代码
					
						cp -R /home/devel/_rootfs/* ramdisk
					 
			
 
			拷贝完成后卸载ramdisk
 
			
 
			
 
			最后压缩ramdisk8M.image文件:
 
			
 
			
 
			ramdisk8M.image.gz镜像文件生成完毕,如图6所示。
  
 |