zedboard----------linux之根文件系统制作
来源:互联网 发布:mac有自带的画图软件吗 编辑:程序博客网 时间:2024/05/22 08:20
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 http://matt.ucc.asn.au/dropbear/releases/dropbear-0.53.1.tar.gztar 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"
编译
make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" MULTI=1 strip
安装dropbear并创建符号链接
make installln -s http://www.cnblogs.com/sbin/dropbear /home/devel/_rootfs/usr/bin/scp
4、利用交叉编译工具链,构建/lib目录
进入/home/devel/_rootfs,创建
lib目录
cd /home/devel/_rootfsbash> mkdir lib
将交叉编译环境库拷贝到这个目录下
cp /opt/14.2/ISE_DS/EDK/gnu/arm/lin64/arm-xilinx-linux-gnueabi/libc/lib/* lib -r
同样,将工具链拷贝到sbin/和usr/bin/下
cp /opt/14.2/ISE_DS/EDK/gnu/arm/lin64/arm-xilinx-linux-gnueabi/libc/sbin/* sbin/ -rcp /opt/14.2/ISE_DS/EDK/gnu/arm/lin64/arm-xilinx-linux-gnueabi/libc/usr/bin/* usr/bin/ -r
这部分就有差别了,我是在虚拟机下面做的,交叉编译工具也是安装在虚拟机下面的,所以我的那个路径为
/home/gzw/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/,,,,,,
usr/bin目录文件下载
sbin目录文件下载
lib目录文件下载
5、创建其他目录和相应配置
至此,几个重要的目录和文件都已经创建完毕,需要安装FHS要求把其他目录和文件创建。切换到_rootfs目录下,使用命令
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 0none /dev/pts devpts gid=5,mode=620 0 0none /proc proc defaults 0 0none /sys sysfs defaults 0 0none /tmp tmpfs defaults 0 0
创建"etc/inittab"文件,内容如下
::sysinit:/etc/init.d/rcS# /bin/ash# # Start an askfirst shell on the serial portsttyPS0::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/shecho "Starting rcS..."echo "++ Mounting filesystem"mount -t proc none /procmount -t sysfs none /sysmount -t tmpfs none /tmpecho "++ Setting up mdev"echo /sbin/mdev > /proc/sys/kernel/hotplugmdev -smkdir -p /dev/ptsmkdir -p /dev/i2cmount -t devpts devpts /dev/ptsecho "++ Starting telnet daemon"telnetd -l /bin/shecho "++ Starting http daemon"httpd -h /var/wwwecho "++ Starting ftp daemon"tcpsvd 0:21 ftpd ftpd -w /&echo "++ Starting dropbear (ssh) daemon"dropbearecho "rcS Complete"
并设置其权限
chmod 755 etc/init.d/rcSsudo chown root:root etc/init.d/rcS
BTW,我们的后续设计中,为了实现应用程序上电后自动启动运行,可以修改rcS文件内容,将应用程序执行命令写入到rcS文件中。
6、生成ramdisk镜像文件
至此,根文件系统所有需要的目录和文件已经准备完毕。查看_rootfs下的内容
这个根文件系统能够被执行,还需要将其制作成image镜像文件,并压缩。
接下来的操作如果和xilinx wiki上操作一致,最终的文件系统并不能被识别,所以这里介绍的和xilinx wiki有少许不同。
创建镜像文件ramdisk8M.image,并设置大小为8M,文件系统格式为ext2:
cd ~dd if=/dev/zero of=ramdisk8M.image bs=1024 count=8192mke2fs -F ramdisk8M.image -L "ramdisk" -b 1024 -m 0tune2fs ramdisk8M.image -i 0chmod 777 ramdisk8M.image
大小可以按照需要自己调整,但是最好不要超过32M。
而那个 /dev/zero就是个伪文件。
创建ramdisk目录,将ramdisk8M.image 挂载到该目录下,
mkdir ramdiskmount -o loop ramdisk8M.image ramdisk/
接下来,只需要将_rootfs目录下的内容全部拷贝到ramdisk下即可
cp -R /home/devel/_rootfs/* ramdisk
注意,这里cp的参数一定是R而非r。
这样,这个镜像文件的内容就是_rootfs目录下的内容了。将其卸载就可
umount ramdisk/
到此,根文件系统镜像文件ramdisk8M.image 制作完成,将其压缩
gzip -9 ramdisk8M.image
生成ramdisk8M.image.gz文件,拷贝到SD上就可以了。
- zedboard----------linux之根文件系统制作
- 制作ZedBoard的linux根文件系统
- 制作ZedBoard上linux根文件系统(ramdisk)
- Zedboard-制作根文件系统【详细讲解版】
- [ZedBoard移植嵌入式Linux教程(9,10)]编译设备树dts为dtb,制作根文件系统
- 一步一步学zedboard之十六根文件系统制作
- linux系统之根文件系统树制作
- 制作ZedBoard-linaro-desktop-ubuntu全过程之编译Linux内核
- linux根文件系统制作
- linux根文件系统制作
- linux根文件系统制作
- linux 根文件系统制作
- 制作linux根文件系统
- linux 根文件系统制作
- Linux根文件系统制作
- 制作linux根文件系统
- 一步一步学zedboard之十八加载根文件系统启动内核
- 一步一步学zedboard之十九修改根文件系统重新启动
- 不喜欢的工作,可能通往一个崭新世界(转自周鸿袆新浪博客)
- linux学习之samba安装问题详解
- zedboard-----------tesseract移植全过程记录
- STL中map用法详解
- c++ 初学 引用传递和对象传递
- zedboard----------linux之根文件系统制作
- C++智能指针
- Ambiguous column name
- 教你把屏幕录像专家录制的视频进行高压缩使体积变最小
- 蒙特·卡罗方法求PI
- opencv学习之路(1)
- HDOJ 4540 威威猫系列故事——打地鼠 杭电 ACM
- 基于epoll的聊天室程序
- firefox应用 插件