7. SD卡文件内容五(rootfs)
Linux中Root Filesystem(根文件系统)是必不可少的,常用的是BusyBox,本节就介绍一下使用BusyBox制作Linux根文件系统rootfs,主要参考xilinx wiki上Zynq Root FileSystem Creation方法:
1. 准备工作:
首先在Ubuntu中建立ARM GNU交叉编译环境,笔者使用的是Ubuntu11.04平台。
通过Git下载BusyBox:
git clone git://git.busybox.net/busybox
复制代码
2. 编译安装BusyBox
在Ubuntu平台中进入BusyBox,进行初始化默认配置:
cd busybox
make defconfig
自定义配置BusyBox,会弹出图形界面设置窗口:
make menuconfig
进入BusyBox Settings->Installation Options->BusyBox installationprefix设置BusyBox的安装目录,将其设置为/home/devel/_rootfs。
完成配置后,输入以下脚本安装BusyBox:
sudo make install
在设置的目录中会生成rootfs,其中包含了bin、sbin、usr/bin和usr/sbin 目录,其下包含了我们常用的命令,这些命令都是指向bin/busybox的软链接。
3. 编译安装Dropbear
Dropbear提供支持SSH客户端/服务器功能。
从Dropbear网站上下载Dropbear,并解压:
wget
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中建立链接,生成scp
sudo make install
ln -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. 其它目录生成和配置
rootfs中还需要创建其它目录,如下脚本:
mkdir dev etc etc/dropbear etc/init.d mnt opt proc root sys tmp var var/log var/www
创建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
umount ramdisk/
最后压缩ramdisk8M.image文件:
gzip -9 ramdisk8M.image
ramdisk8M.image.gz镜像文件生成完毕。
附录A SD卡分区方法
可以在windows系统和linux中分别进行分区操作,在linux下使用gparted分区工具,
在windows推荐使用sd 卡分区软件PM9.0 汉化版工具。我是在xp下装的ubuntu的虚拟机,
因此是在xp下对SD 卡进行分区的,使用的是PM工具。
使用VMware 虚拟机+gparted对SD卡分区参考:
安装过程大同小异,选择安装目录就可以了。
分区过程如下:
1) 插入SD 卡,容量不小于4GB
2) 将SD 卡格式化为FAT32 格式,注意不要选择快速格式化
3) 打开PM 软件,在SD 卡上右键打击,选择“移动/调整分区大小”
4) 将下图的红线框的数值改为FAT32 的大小,确保大于50MB,我这边给的是100MB,
然后点击线面的两个框,就会自动更新数值,然后点击“是”
5) 鼠标放在上图蓝色区域,点击右键,选择“更改卷标”,将其改为BOOT,然后点击“是”
6) 接下来创建linux 分区:点击“创建分区”,然后创建新分区为“主分区”,卷标为“rootfs”,文件系统为“Linux
Ext3”,由于只分两个区,因此新分区大小就为剩下的区域的最大值,然后点击“是”
7) 回到主界面,点击“应用改变”,一路选择“yes”。时间比较长,耐心等待
8) 分区完成后,点击“close”,退出软件
9) 要想重新将SD 弄成一个区,只用删除掉分区,再创建分区,指定大小和格式便可
评论
查看更多