天天看點

linux檔案系統xilinx,基于zynq的Linux根檔案系統生成

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,會彈出圖形界面設定視窗,如圖1所示

make menuconfig

linux檔案系統xilinx,基于zynq的Linux根檔案系統生成

進入BusyBox SetTIngs->InstallaTIon OpTIons->BusyBox installationprefix設定BusyBox的安裝目錄,将其設定為/home/devel/_rootfs,如圖2所示。

linux檔案系統xilinx,基于zynq的Linux根檔案系統生成

完成配置後,輸入以下腳本安裝BusyBox:

make install

在設定的目錄中會生成rootfs,其中包含了bin、sbin、usr/bin和usr/sbin 目錄,其下包含了我們常用的指令,這些指令都是指向bin/busybox的軟連結,如圖3所示。

linux檔案系統xilinx,基于zynq的Linux根檔案系統生成

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中建立連結,如圖4所示為生成的scp

sudo make install

ln -s ../../sbin/dropbear /home/devel/_rootfs/usr/bin/scp

linux檔案系統xilinx,基于zynq的Linux根檔案系統生成

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

linux檔案系統xilinx,基于zynq的Linux根檔案系統生成

建立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鏡像檔案生成完畢,如圖6所示。