制作ZedBoard的linux根文件系统

 本次制作根文件系统用到BusyBox、Dropbear、交叉工具链、mkimage

制作根文件系统的步骤分为如下4步:
1、 编译BusyBox
2、 编译Dropbear
3、 工具链库与应用的设置
4、 目录的创建与设置
5、   制作ramdisk镜像文件
6、   生成uramdisk.image.gz
 
 我的交叉编译器名字是arm-none-linux-gnueabi-

一、编译BusyBox

1、下载BusyBox源码
    >git clone git://git.xilinx.com/apps/busybox.git
    >cd busybox
2、使用默认配置并初始化BusyBox
    >make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- defconfig
这条命令是使用默认的配置来生成.config文件。如果想对配置做一些修改,可以再运行make menuconfig 命令来手动更改配置。
编译错误:我在make install 的时候出现ext2_fs.h文件找不到的错误,解决的方法就是运行make menuconfig命令手动将配置中的mkfs_ext2选项去掉。
3、make install 命令安装根文件系统到指定目录。
    >make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- install
此时就会在busybox目录下生成一个_install目录。(因为我没用通过make menuconfig
修改安装目录路径,所以默认是在busybox目录下生成一个_install目录。如果想更改路径,在配置菜单的BusyBox Settings->Installation Options->BusyBox installation prefix设置安装路径。)
编译错误:编译中如果出现一个rlimit_fsize未定义的错误,解决的方法是在include/libbb.h文件中加入#include<sys/resource.h>

二、编译Dropbear

 

Dropbear是一个为我们提供SSH服务的工具。这里使用0.53.1版本
1、下载源码
    >wget http://matt.ucc.asn.au/dropbear/release/dropbear-0.53.1.tar.gz
    >tar xfvz dropbear-0.53.1.tar.gz
    >cd dropbear-0.53.1
2、配置
    >./configure --prefix=/home/busybox/_install --host=arm-none-linux-gnueabi --disable-zlib 
    CC=arm-none-linux-gnueabi-gcc LDFLAGS=”-Wl,--gc-sections” CFLAGS=”-ffunction-          sections  -fdata-sections --Os”
其中/home/busybox/_install需要根据实际busybox编译后的存放路径来决定。
3、编译
      >make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" MULTI=1 strip
编译错误:双引号中的东西不能少,陆佳华那本书上这一句少了dropbearconvert,导致编译时出现dropbearconvert没找到的错误。
4、make install,并为根文件系统的scp创建一个软连接。
    >sudo make install
    >cd /home/busybox/_install/usr/bin/
    >ln –s ../../sbin/dropbear ./scp

三、工具链动态与应用的设置

1、进入_install目录并建立lib目录
    >cd /home/busybox/_install
    >mkdir lib
2、复制交叉编译器提供的库文件,<path>为你实际交叉编译器安装的路径
   >cp <path>/arm-none-linux-gnueabi/libc/lib/* lib –r
3、剥离库中的调试标志
   >arm-none-linux-gnueabi-strip lib/*
4、复制交叉编译器提供的工具集
   >cp <path>/arm-none-linux-gnueabi/libc/sbin/* sbin/ -r
   >cp <path>/arm-none-linux-gnueabi/libc/usr/bin/* usr/bin/ -r

四、目录的创建与配置

 

这一步是要创建文件系统下其余的目录,以及在启动系统时所需的配置文件,所有操作都在_install目录下
1、创建目录
    >mkdir dev etc etc/dropbear etc/init.d mnt opot proc root sys tmp var var/log var/www
2、创建配置文件etc/fstab,内容为:
   LABEL=/ /     tmpfs defaults         00
   none /dev/pts devpts gid=5,mode=620 00
   none /proc proc     defaults 00
   none /sys sysfs defaults 00
   none /tmp tmpfs defaults  00
2、创建配置文件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
3、创建配置文件etc/passwd,内容为:
:root:$1 $qC.CEbjC $SVJyqm.IG.gkElhaeM.FD0:0:0:root:/root:/bin/sh
4、创建配置文件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”
 
5、为rcS赋予root的执行权限
    >chmod 755 etc/init.d/rcS
    >sudo chown root:root etc/init.d/rcS

五、制作ramdisk镜像文件

1、创建镜像文件
   >cd ~
   >dd if=/dev/zero of=ramdisk.img bs=1024 count=8192
   >mke2fs –F ramdisk.img –L “ramdisk” –b 1024 –m 0
   >tune2fs ramdisk.img –i 0
   >chmod 777 ramdisk.img
2、复制_install内容到这个镜像中
   >mkdir ramdisk
   >sudo mount –o loop ramdisk.img ramdisk/
   >sudo cp –R /home/busybox/_install/* ramdisk
   >sudo umount ramdisk/
3、对镜像进行压缩,生成ramdisk.img.gz
   >gzip ramdisk.img

六、生成uramdisk.image.gz

 

使用mkimage命令为ramdisk.img.gz添加一些头部信息,生成uramdisk.image.gz,否则uboot将提示ramdisk格式错误。
1、将uboot的tools目录下的mkimage拷贝到交叉编译器的bin目录中(相当于添加到环境变量中)
2、使用如下命令生成uramdisk.image.gz
    >mkimage -n 'uboot ext2 ramdisk' -A arm -O linux -T ramdisk -C gzip -d ramdisk.img.gz     uramdisk.image.gz
 
七、由uramdisk.image.gz生成ramdisk.img.gz
假如我手上有一个uramdisk.image.gz的文件系统,我想获取其内部的内容,这个时候步骤应该是解压--->挂载。但是由于mkimage工具是在ramdisk.img.gz的头部添加了64字节的uboot信息来生成uramdisk.image.gz(破坏了压缩格式),所以此时无法直接解压。 可以直接使用Uedit32编辑器(或使用某些命令如dd)删除掉uramdisk.image.gz头部的64字节,然后重命名为ramdisk.img.gz。此时就可以使用gunzip解压为ramdisk.img,再进行挂载就可以了。
 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值