首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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

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

原始的描述在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/server3.  Toolchain Library:including standard C library and helper applications such as gdb-server.4. 目录创建和配置 1. 编译BusyBoxbash> git clone git://git.xilinx.com/apps/busybox.gitbash> cd busybox
bash> make defconfig
可以用以下命令修改配置:
bash> make menuconfig
这里修改BusyBox Settings->Installation Options->BusyBox installation prefix为/home/wave/xilinx/_rootfs 编译并安装
bash> make install
2. 编译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的文件名,前一个是其指向的链接位置。

3. 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
4. 目录创建和配置 切换到"_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":
root1$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
5. 创建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的工具等。 来源:赛灵思中文社区论坛
记录学习中的点点滴滴,让每一天过的更加有意义!
返回列表