新闻中心

在ZC702上运行Linux(5)-创建Root File System

来源:Xilinx
发布时间:[2014-01-29]

  原始的描述在http://wiki.xilinx.com/zynq-rootfs

  有些资源与该页面的描述不同:

  工具链在/home/wave/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/

  Rootfs在/home/wave/xilinx/_rootfs

  可以按照以下顺序创建基本的Linux Root File System:

  1. 编译BusyBox提供基本工具

  2. 编译Dropbear提供SSH client/server

  3. Toolchain Library:including standard C library and helper applications such as gdb-server.

  4. 目录创建和配置

  一. 编译BusyBox

  bash> git clone git://git.xilinx.com/apps/busybox.git

  bash> cd busybox

  bash> make defconfig

  可以用以下命令修改配置:

  bash> make menuconfig

  这里修改BusyBox Settings->Installation Options->BusyBox installation prefix为/home/wave/xilinx/_rootfs

  编译并安装

  bash> make install

  二. 编译Dropbear

  bash> wget http://matt.ucc.asn.au/dropbear/releases/dropbear-0.53.1.tar.gz

  bash> tar xfvz dropbear-0.53.1.tar.gz

  bash> cd dropbear-0.53.1

  bash> ./configure --prefix=/home/wave/xilinx/_rootfs --host=arm-xilinx-linux-gnueabi --disable-zlib CC=arm-xilinx-linux-gnueabi-gcc LDFLAGS="-Wl,--gc-sections" CFLAGS="-ffunction-sections -fdata-sections -Os"

  bash> make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" MULTI=1 strip

  bash> sudo make install

  bash> ln -s ../../sbin/dropbear /home/wave/xilinx/_rootfs/usr/bin/scp

  说明:后一个名字是要创建的link file的文件名,前一个是其指向的链接位置。

  三. Library

  bash> cd /home/wave/xilinx/_rootfs

  bash> mkdir lib

  bash> cp /home/wave/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/arm-xilinx-linux-gnueabi/libc/lib/* lib -r

  bash> arm-xilinx-linux-gnueabi-strip lib/*

  注意:arm-xilinx-linux-gnueabi-strip:lib/libgcc_s.so是一个纯文本文件,需要跳过去。

  用”du -h”观察lib的大小。Strip前是6.7M,strip后是2.9M

  bash> cp /home/wave/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/arm-xilinx-linux-gnueabi/libc/sbin/* sbin/ -r

  bash> cp /home/wave/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/arm-xilinx-linux-gnueabi/libc/usr/bin/* usr/bin/ -r

  四. 目录创建和配置

  切换到"_rootfs" 目录下

  bash> mkdir dev etc etc/dropbear etc/init.d mnt opt proc root sys tmp var var/log var/www

  创建内容如下的文件 "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"

  ::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":

  root:$1$qC.CEbjC$SVJyqm.IG.gkElhaeM.FD0:0:0:root:/root:/bin/sh

  创建内容如下的文件"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"的权限:

  bash> chmod 755 etc/init.d/rcS

  bash> sudo chown root:root etc/init.d/rcS

  五. 创建ramdisk image

  bash> cd ~

  bash> dd if=/dev/zero of=ramdisk.img bs=1024 count=8192

  bash> mke2fs -F ramdisk.img -L "ramdisk" -b 1024 -m 0

  bash> tune2fs ramdisk.img -i 0

  bash> chmod 777 ramdisk.img

  bash> mkdir ramdisk

  bash> sudo mount -o loop ramdisk.img ramdisk/

  bash> sudo cp -R _rootfs/* ramdisk

  bash> sudo umount ramdisk/

  bash> gzip -9 ramdisk.img

  给ramdisk image增加u-boot header:

  bash> mkimage -A arm -T ramdisk -C gzip -d ramdisk.img.gz uramdisk.image.gz

  奇怪的是,自己生成的ramdisk image是3.6MB,prebuilt image是5.1MB。将prebuilt rootfs的u-boot header截掉并将内容导出,发现ramdisk的size是16MB,并且里面多了些内容,比如更新QSPI FLASH的工具等。

最新活动

寻找《xilinx UltraScale™ MPSoC架构》 下载文档有奖
活动时间:2014/3/22-2014/5/22
Xilinx Zynq交流群已开辟
QQ群号:323470211,还有 Xilinx 资深工程师入驻,帮您答疑解惑!!!
ZYNQ论坛互动专区
ZedBoard及ZingBoard开发优秀手记展示,详情进入……