制作ZedBoard上linux根文件系统(ramdisk)
Digilent的OOB设计给出了一个ZedBoard上完整的运行的linux系统所需要的所有文件,包括配置FPGA的bit文件、 配置ARM PS系统的First-Stage boot loader(FSBL)和引导linux需要的Second-Stage boot loader(SSBL)、Linux内核zImage、设备树文件devicetree_ramdisk.dtb 以及根文件系统ramdisk8M.image.gz。linux在运行时,加载这个ramdisk8M.image.gz镜像文件到DDR3中来执行实现根文件系统的建立,很多并不像在ubuntu中对文件系统操作那样简单。本小节介绍如何制作ZedBoard可运行的根文件系统ramdisk8M.image.gz镜像文件,参照xilinx wiki 。
通过本小节的学习,在以后的开发中,可以更加顺利的修改文件系统,给设计带来方便。
硬件平台:Digilent ZedBoard
开发环境:Windows XP 32 bit + Wmare 8.0 + Ubuntu 10.04 + arm-linux-xilinx-gnueabi交叉编译环境
Zedboard linux: Digilent OOB Design
1、FHS(Filesystem Hierarchy Standard)标准介绍
当我们在linux下输入ls / 的时候,见到的目录结构以及这些目录下的内容都大同小异,这是因为所有的linux发行版在对根文件系统布局上都遵循FHS标准的建议规定。该标准规定了根目录下各个子目录的名称及其存放的内容:
目录名
存放的内容
/bin
必备的用户命令,例如ls、cp等
/sbin
必备的系统管理员命令,例如ifconfig、reboot等
/dev
设备文件,例如mtdblock0、tty1等
/etc
系统配置文件,包括启动文件,例如inittab等
/lib
必要的链接库,例如C链接库、内核模块
/home
普通用户主目录
/root
root用户主目录
/usr/bin
非必备的用户程序,例如find、du等
/usr/sbin
非必备的管理员程序,例如chroot、inetd等
/usr/lib
库文件
/var
守护程序和工具程序所存放的可变,例如日志文件
/proc
用来提供内核与进程信息的虚拟文件系统,由内核自动生成目录下的内容
/sys
用来提供内核与设备信息的虚拟文件系统,由内核自动生成目录下的内容
/mnt
文件系统挂接点,用于临时安装文件系统
/tmp
临时性的文件,重启后将自动清除
制作根文件系统就是要建立以上的目录,并在其中建立完整目录内容。其过程大体包括:
编译/安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录
利用交叉编译工具链,构建/lib目录
手工构建/etc目录
制作根文件系统的镜像文件
下面就来详细介绍这个过程。
1、编译安装busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目录
首先下载BusyBox源码,使用命令
git clone git://git.busybox.net/busybox
当然,和往常一样,为了给上不了国外网站的同学们提供便利,这里提供一个国内的下载链接:
busybox下载
下载后,切换到busybox目录,并进行默认配置
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- defconfig
使用命令
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- menuconfig
打开可视化界面配置
逐一进入
BusyBox SetTIngs->InstallaTIon OpTIons->BusyBox installaTIon prefix
将目录设置为
/home/devel/_rootfs
保存后退出,并安装busybox
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- install
安装好后,我们能够在/home/devel/_rootfs目录下看到生成了的bin sbin usr/bin usr/sbin 目录,其下包含了我们常用的命令,这些命令都是指向bin/busybox的软链接。
3、安装Dropbear
我对dropbear的功能不是很明白,从百度上获取到的信息是"dropbear实现完整的SSH客户端和服务器版本2协议。它不支持SSH版本1 的向后兼容性,以节省空间和资源,并避免在SSH版本1的固有的安全漏洞。还实施了SCP的。SFTP支持依赖于一个二进制文件,可以通过提供的OpenSSH或类似的计划。"由于xilinx wiki上有这样的步骤,还是老老实实的做吧。
下载dropbear,并解压
wget
tar xfvz dropbear-0.53.1.tar.gz
配置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"