嵌入式linux根文件系统制作经典doc.ppt
《嵌入式linux根文件系统制作经典doc.ppt》由会员分享,可在线阅读,更多相关《嵌入式linux根文件系统制作经典doc.ppt(322页珍藏版)》请在三一文库上搜索。
1、嵌入式linux根文件系统制作(经典),1 准备工作,下载busybox工具 说明:用于制作可执行命令工具集,2 开发环境,1)主机:RedHat 9,2) 交叉编译工具路径:/usr/local/arm/3.3.2/ (用于编译busybox1.2.0),把/usr/local/arm/3.3.2/bin路径添加到/etc/profile文件中,3)开发板:友善之臂SBC2410,4)开发板分别使用的Linux2.4.18内核和Linux2.6.14内核验证文件系统,3 建立目标板空根目录文件夹及根目录下的文件夹,root190 friendly-arm# mkdir myroots,roo
2、t190 friendly-arm#pwd,/friendly-arm/myroots,root190 friendly-arm#cd myroots,root190 myroots#,root190 myroots# mkdir bin sbin usr lib dev mnt opt root etc home proc tmp var,root190 myroots# mkdir etc/init.d,进入etc/init.d目录下,建立一个脚本文件,并命名为rcS,用gedit打开,添加如下内容:,#! /bin/sh,PATH=/sbin:/bin:/usr/sbin:/usr/bi
3、n:/usr/local/bin:,runlevel=S,prevlevel=N,umask 022,export PATH runlevel prevlevel,#,# Trap CTRL-C &c only in this shell so we can interrupt subprocesses.,#,trap “:“ INT QUIT TSTP,root190 myroots# cd /lib,也就是进入lib目录,添加相应的库文件,具体操作略。,4 移植Busybox,进入到压缩文件存放的目录下,并解压。然后进入解压后的busybox目录文件夹,随后配置busybox 。,root
4、190 busybox-1.2.0# make menuconfig,执行之后,将出现如下图所示的配置界面:,由于每个版本的配置选项组织有所不同。不管怎样,我们注意以下选项就行了:,1) Support for devfs,2) Build BusyBox as a static binary ( no shared libs ) /将busybox编译成静态链接,3) Do you want to build busybox with a Cross Compile?,(/usr/local/arm/3.3.2/bin/arm-linux-) Cross Compile prefix /指定
5、交叉编译器,4) init,5) Support reading an inittab file /支持init读取/etc/inittab 配置文件,6) (X) ash选中ash /建立的rcS脚本才能执行,7)ash,8)cp cat ls mkdir mv /可执行命令工具的选择,自己看着办吧,需要用到的就选上,9) mount,10) umount,11) Support loopback mounts,12) Support for the old /etc/mtab file,13) insmod,14) Support version 2.2.x to 2.4.x Linux
6、kernels,15) Support version 2.6.x Linux kernels,16) vi,以上内容必须选上,其他可按默认值;如果要支持其他功能,如网络支持等,可按需选择,英语不是很烂的话,这些都没有问题。,配置好之后,保存退出。然后对其编译和安装到刚才建立的根文件系统目录下:,root190 busybox-1.2.0 make TARGET_ARCH=arm CROSS=arm-linux- PREFIX=/friendly-arm/myroots/ all install,安装好之后,将相应的二进制文件拷贝到根文件系统相应的目录下。,5 制作yaffs文件系统包,roo
7、t190 friendly-arm# mkyaffsimage myroots myroots.img,6下载根文件系统包到开发板上,并运行,其结果如图所示,7补充,首先,本文档制作的根文件系统,是用mkyaffsimage打包成了yaffs镜像文件,也可以使用其他打包工具制作成其他形式的根文件系统,但必须是内核要有相应文件系统的支持,否则,将无法挂上根文件系统。,其次,我们可以根据项目需要,在相应的目录下,添加相应的文件,并配置相应的服务。如内核动态加载模块可放在lib下,在启动脚本里挂载相应的模块;在etc目录下,可移植tinyligin 登录界面应用程序,等等,用Busybox创建文件系
8、统,编译busybox的组合: busybox-1.0.0 arm-linux-gcc-2.95.3 (sbc2410等开发板) busybox-1.1.3 arm-linux-gcc-3.3.2 buxybox-1.7.3 arm-linux-gcc-3.4.1,经典参考: http:/ 下载busybox http:/husaberg.toby- 文件系统制作,移植基本过程:,1. 到http:/ 2. 解压busybox1.7.3 tar jxvf busybox-1.7.3.tar.bz2 3. make defconfig 4. make menuconfig 在build opti
9、ons中选择Build busybox as a static binary,主要是C库的连接方式,安装目录等。 5. make,6. 创建rootfs目录 7. make install,配置可参考: (小寿制作)busybox-1.1.3制作根文件系统! http:/ busybox的编译1.4.2 和1.5.1(根文件系统制作) http:/ luofuchong,http:/ 1. 出现如下错误 CC miscutils/taskset.o miscutils/taskset.c:17: error: parse error before * token miscutils/tasks
10、et.c:18: warning: function declaration isnt a prototype miscutils/taskset.c: In function _from_cpuset: miscutils/taskset.c:22: error: CPU_SETSIZE undeclared (first use in this function) miscutils/taskset.c:22: error: (Each undeclared identifier is reported only once miscutils/taskset.c:22: error: fo
11、r each function it appears in.) miscutils/taskset.c:26: warning: implicit declaration of function CPU_ISSET miscutils/taskset.c:26: error: mask undeclared (first use in this function) miscutils/taskset.c: In function taskset_main: miscutils/taskset.c:47: error: cpu_set_t undeclared (first use in thi
12、s function) miscutils/taskset.c:47: error: parse error before “mask“ miscutils/taskset.c:68: warning: implicit declaration of function CPU_ZERO miscutils/taskset.c:68: error: new_mask undeclared (first use in this function) miscutils/taskset.c:69: error: CPU_SETSIZE undeclared (first use in this fun
13、ction) miscutils/taskset.c:71: warning: implicit declaration of function CPU_SET miscutils/taskset.c:78: error: mask undeclared (first use in this function) make1: * miscutils/taskset.o Error 1 make: * miscutils Error 2,make menuconfig 找到Miscellaneous Utilities,去掉task set,2. time.c libbb/time.c:20:
14、error: “CLOCK_MONOTONIC“ undeclared (first use in this function),make menuconfig 去掉Busybox Settings-Busybox Library Tuning-Use clock_gettie(CLOCK_MONOTONIC) syscall,相关问题可参考: 交叉编译busybox http:/ Busybox 的编译过程 http:/ rootfs,cd rootfs mkdir bin dev etc lib proc sbin sys usr mnt tmp var chmod 1777 tmp mk
15、dir usr/bin usr/lib usr/sbin lib/modules mkdir var/lock var/lib var/log var/run var/tmp chmod 1777 var/tmp cd dev/ mknod -m 666 console c 5 1 mknod -m 666 null c 1 3 cd / 注意:执行脚本时,要切换到root用户。,在内核目录执行:,$cd home/arm/linux-2.6.14.1/,$make modules $make modules_install INSTALL_MOD_PATH=/nfs/rootfs/,有关li
16、nuxrc、rcS 等文件的编写,可参考: 用BusyBox制作根文件系统 http:/ linux 2.6.22.1内核在s3c2410平台的移植(完美版) 四:文件系统的制作 部分 http:/ $vim rootfs/linuxrc #!/bin/sh echo “Hello linux ,gggggg“ exec /sbin/init 然后修改权限:chmod 775 linuxrc,用密码登录可参考: 用busybox制作嵌入式Linux的文件系统 http:/ busybox login :启动busybox文件系统后怎么主动提示 用户登陆认证? 在配置BusyBox时都加了get
17、ty,passwd,login等命令,也加入了文件group shadow passwd 但还是没有弹出界面,自己输入login后倒是提示你输入用户名和密码 内核启动后加载文件系统,busybox为1.1.3 挂载成功后就直接到 BusyBox v1.1.3 (2007.12.13-06:5 Please press Enter to activate this console. 怎么使启动文件系统立即需要用户验证?,编译工具的选择有两种方式:,ARM开发板:要使用交叉编译,所以我们要指定交叉编译工具的位置,可通过现面的方法实现: 方法一: 修改宿主机的PATH变量,使其包含交叉编译工具的目录
18、;然后在调用make命令时,指定TARGET_ARCH和CROSS变量:make TARGET_ARCH=arm CROSS=arm-linux-。 方法二:新版的busybox可以在配置中设定交叉编译工具的,直接运行make就跟为本机编译busybox没有任何区别了。 http:/ 赖于树 P248 复制链接库的步骤: $cp /usr/local/arm/3.4.1/arm-linux/lib/ $cp *-*.so $PRJROOT/rootfs/lib $cp -d *.so.*0-9 $PRJROOT/rootfs/lib/ $cp libSegFault.so libmemusag
19、e.so $PRJROOT/rootfs/lib/ 这些库文件中包含大量的调试信息,交叉编译工具链提供了一个除去这些调试信息的工具:strip $arm-linux-strip $PRJROOT/rootfs/lib/*.so,参考:基于s3c2440 yaffs2 文件系统的移植 http:/ 3. 建立动态运行库 # cp -rfd /usr/local/arm/4.0.3/arm-linux/lib/* rootfs/lib/ 拷贝经过交叉编译的库文件,参数-d,保持库文件的链接关系。 # rm -rf rootfs/lib/*.a 删除所有的静态库文件。 注:/usr/local/ar
20、m/4.0.3/ 为交叉编译工具链的存放目录。 # arm-linux-strip rootfs/lib/* 移除所有的符号信息, 压缩库空间。,如果不知道需要哪些共享库,可以在你写好自己的程序后使用#ld hello 命令来看看需要哪些共享库然后在复制到/lib目录下面!,参考:http:/ 用busybox创建基于Linux2.6.24内核的nfs根文件系统,4 查看共享了哪些库文件 用命令 arm-linux-readelf -a $program | grep “shared library“ - rootlocalhost bin# pwd /root/maoyong/busybox
21、-1.4.2/_install/bin,rootlocalhost bin# arm-linux-readelf -a busybox | grep “shared library“ 0x00000001 (needed) shared library: libcrypt.so.1 0x00000001 (needed) shared library: libm.so.6 0x00000001 (needed) shared library: libc.so.6 - 如上所示 要把 /usr/local/arm/3.3.2/arm-linux/lib目录下的 libcrypt.so.1 lib
22、m.so.6 libc.so.6 文件是busybox所需的共享库文件,要把它以及和他相关的链接文件拷贝到 你新建的文件系统的 lib 目录。 (注意: libcrypt.so.1 libm.so.6 libc.so.6相关的链接文件也要拷贝到lib目录),使用busybox-1.9.2制作根文件系统,制作嵌入式根文件系统常见问题详解,制作嵌入式根文件系统常见问题详解,在介绍制作嵌入式根文件系统常见问题详解之前首先介绍点关于嵌入式根文件系统的背景知识,关于inittab的: init进程是系统中所有进程的父进程,init进程繁衍出完成通常操作所需的子进程,这些操作包括:设置机器名、检查和安装磁
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 linux 文件系统 制作 经典 doc
链接地址:https://www.31doc.com/p-3342615.html