文档章节

移植 linux kernel ,yaffs2文件系统镜像,含busybox

宁宁爸
 宁宁爸
发布于 2015/12/04 16:36
字数 1369
阅读 183
收藏 1

一、建立根文件系统目录  

进入到/opt/studyarm目录,新建建立根文件系统目录的脚本文件create_rootfs_bash,使用命令chmod +x create_rootfs_bash改变文件的可执行权限,./create_rootfs_bash运行脚本,就完成了根文件系统目录的创建。

#!/bin/sh

echo "------Create rootfs directons start...--------"
mkdir rootfs
cd rootfs

echo "--------Create root,dev....----------"
mkdir root dev etc boot tmp var sys proc lib mnt home usr
mkdir etc/init.d etc/rc.d etc/sysconfig  
mkdir usr/sbin usr/bin usr/lib usr/modules

echo "make node in dev/console dev/null"
mknod -m 600 dev/console c 5 1
mknod -m 600 dev/null    c 1 3
mkdir mnt/etc mnt/jffs2 mnt/yaffs mnt/data mnt/temp
mkdir var/lib var/lock var/run var/tmp

chmod 1777 tmp
chmod 1777 var/tmp


echo "-------make direction done---------"

改变了tmp目录的使用权,让它开启sticky位,为tmp目录的使用权开启此位,可确保tmp目录底下建立的文件,只有建立它的用户有权删除。尽管嵌入式系统多半是单用户,不过有些嵌入式应用不一定用root的权限来执行,因此需要遵照根文件系统权限位的基本规定来设计。

二、建立动态链接库

cd rootfs/lib
cp -fr /home/working/arm-linux-gcc/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/* ./

将交叉编译器下的:相应库文件,拷贝到 rootfs/lib 下

注:本用的交叉编译器是:arm-linux-gcc 4.3.2

三、交叉编译Bosybox

Bosybox是一个遵循GPL v2协议的开源项目,它在编写过程总对文件大小进行优化,并考虑了系统资源有限(比如内存等)的情况,使用Busybox可以自动生成根文件系统所需的bin、sbin、usr目录和linuxrc文件.

1、解压busybox cd /mnt/hgfs/share 

tar –zxvf busybox-1.13.3.tar.tgz –C /opt/studyarm 2、进入源码,修改Makefile文件: cd /opt/studyarm/busybox-1.13.3 修改:  CROSS_COMPILE ?=arm-linux-   //第164行  ARCH    ?=arm   //第189行 3、配置busybox

输入make menuconfig进行配置

 (1)、Busybox Settings--->    

    General Configuration--->    

         [*] Show verbose applet usage messages 

         [*] Store applet usage messages in compressed form    

         [*] Support –install [-s] to install applet links at runtime    

         [*] Enable locale support(system needs locale for this to work)    

         [*] Support for –long-options    

         [*] Use the devpts filesystem for unix98 PTYs     

         [*] Support writing pidfiles    

         [*] Runtime SUID/SGID configuration via /etc/busybox.config    

         [*]  Suppress warning message if /etc/busybox.conf is not readable 

    Build Options--->

         [*] Build BusyBox as a static binary(no shared libs)     

         [*] Build with Large File Support(for accessing files>2GB)

    Installation Options->

        Applets links (as soft-links) --->      

          (./_install) BusyBox installation prefix

   Busybox Library Tuning --->

         (6)Minimum password legth     

          (2)MD5:Trade Bytes for Speed     

          [*]Fsater /proc scanning code(+100bytes)     

         [*]Command line editing     

         (1024)Maximum length of input     

         [*] vi-style line editing commands

         (15) History size     

         [*] History saving     

          [*] Tab completion     

         [*]Fancy shell prompts     

         (4) Copy buffer size ,in kilobytes  

         [*]Use ioctl names rather than hex values in error messages 

         [*]Support infiniband HW

 (2)、Linux Module Utilities--->

         (/lib/modules)Default directory containing modules    

         (modules.dep)Default name of modules.dep 

          [*] insmod 

          [*] rmmod 

          [*] lsmod 

          [*] modprobe 

          -----options common to multiple modutils [ ] support version 2.2/2.4 Linux kernels 

          [*]Support tainted module checking with new kernels 

          [*]Support for module .aliases file 

          [*] support for modules.symbols file

(3)、在busybox中配置对dev下设备类型的支持

dev的创建有三种方法: 

手动创建:在制作根文件系统的时候,就在dev目录下创建好要使用的设备文件,系统挂接根文件系统后,就可以使用dev目录下的设备文件了。 使用devfs文件系统:这种方法已经过时,具有不确定的设备映射、没有足够的主/次设备号、devfs消耗大量的内存。 

udev:它是个用户程序,能根据系统中硬件设备的状态动态的更新设备文件,包括设备文件的创建、删除等。它的操作相对复杂,但灵活性很高 

mdev是busybox自带的一个简化版的udev,适合于嵌入式的应用埸合。其具有使用简单的特点。它的作用,就是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需的节点文件。在以busybox为基础构建嵌入式linux的根文件系统时,使用它是最优的选择。下面的选项将增加对mdev的支持。

Linux System Utilities  --->                     

          [*]Support /etc/mdev.conf               

         [*]Support command execution at device addition/removal 

4、 编译busybox 

编译busybox到指定目录: cd /opt/studyarm/busybox-1.13.3 

make CONFIG_PREFIX=/opt/studyarm/rootfs install 

在rootfs目录下会生成目录bin、sbin、usr和文件linuxrc的内容。

四、建立etc目录下的配置文件

1、etc/mdev.conf文件,内容为空。 

2、拷贝主机etc目录下的passwd、group、shadow文件到rootfs/etc目录下。 

3、etc/sysconfig目录下新建文件HOSTNAME,内容为”MrFeng”。 

4、etc/inittab文件:

#etc/inittab
::sysinit:/etc/init.d/rcS
::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r

5、etc/init.d/rcS文件:

#!/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
runlevel=S
prevlevel=N
umask 022
export PATH runlevel prevlevel
echo "----------munt all----------------"
mount -a
echo /sbin/mdev>/proc/sys/kernel/hotplug mdev -s
echo "***********************************************"
echo "****************BENJAMIN ARM*********************"
echo "Kernel version:linux-2.6.32.2"
echo "Student:Benjamin"
echo "Date:2015.12.02"
echo "***********************************************"
/bin/hostname -F /etc/sysconfig/HOSTNAME

使用以下命令改变rcS的执行权限: Chmod +x rcS

6、etc/fstab文件:

#device    mount-point     type     option     dump   fsck   order
proc          /proc        proc     defaults    0        0
none          /tmp        ramfs    defaults    0        0
sysfs         /sys          sysfs    defaults    0        0
mdev          /dev        ramfs    defaults    0        0

7、 etc/profile文件:

#Ash profile
#vim:syntax=sh
#No core file by defaults
#ulimit -S -c 0>/dev/null 2>&1
USER="id -un"
LOGNAME=$USER
PS1='[\u@\h]\$ '
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH
alias ll="ls -l"
mknod -m 600 /dev/console c 5 1
mknod -m 600 /dev/null    c 1 3

五、制作根文件系统映像文件 

使用以下命令安装好yaffs文件系统制作工具:  cd /mnt/hgfs/share 

tar –zxvf mkyaffs2image.tgz –C / 

在/opt/studyarm目录下,使用命令mkyaffs2image rootfs rootfs.img生成根文件系统映像文件

注:本人用的 mkyaffs2image-128M 工具


© 著作权归作者所有

宁宁爸
粉丝 82
博文 58
码字总数 26478
作品 0
高级程序员
私信 提问
一步一步制作yaffs/yaffs2根文件系统(八)---总结及怎么样使系统自动启动自己编写的程序

通过前几节的学习制作,我大致地制作了一个比较完整的 yaffs 根文件系统,到这时候将自己移植的uboot、内核、根文件系统移植到自己的开发板中,一个基本的嵌入式 linux 系统也算搭建完成了。...

lxllinux
2017/12/21
0
0
Busybox编译及其yaffs2文件系制作

一、Busybox编译(版本busybox-1.13.0) 1、在环境变量中设置交叉编译器 的路径(版本cross-4.3.3) 2、[*] BuildBusybox as a static binary (no shared libs) 3、busybox settings->busybox l......

长平狐
2013/06/03
577
0
Oprofile在Android中的应用

1 oprofile 相关介绍 Oprofile 是用于 Linux 的若干种评测和性能监控工具中的一种。它可以工作在不同的体系结构上,包括 IA32 、 IA64 和 AMD Athlon 系列。它的开销小,将被包含在( Linux ...

鉴客
2011/07/17
2.9K
2
Linux: ARC CPU Linux kernels and GNU tools

ARC CPU Linux kernels and GNU tools http://sourceforge.net/projects/arc-linux/files/ 1)ARC GNU Toolchain 编译工具链,支持ARC700 # ./build_elf32.sh $INSTALL_DIR # ./build_uclibc......

长平狐
2012/06/20
334
0
构建自己的Linux 之二 BusyBox移植

构建自己的Linux 之二 BusyBox移植 BusyBox是一个集成了一百多个最常用linux命令和工具的软件,他甚至还集成了一个http服务器和一个telnet服务器,而所有这一切功能却只有区区1M左右的大小.我们...

长平狐
2013/06/03
169
0

没有更多内容

加载失败,请刷新页面

加载更多

规则引擎

解决问题 版本迭代速度更不上业务变化,但是若多个业务同时变化,除了为每个业务设计专属配置项也不利于操作。就想服务接口单纯化,将复杂多变的业务逻辑交给规则引擎,让用户在web端或cs端自...

无极之岚
19分钟前
3
0
OSChina 周三乱弹 —— 欢迎你来做产品经理

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :10多次劲歌金曲获奖,更多叱咤歌坛排名,黎明才应该是四大天王之首,只可惜拍的电影太少。单曲循环一个多月的歌,力荐 《无名份的...

小小编辑
57分钟前
187
9
500行代码,教你用python写个微信飞机大战

这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。 帮助蹲厕族、YP族、饭圈女孩在无聊之余可以有一样东西让他们振作起来!...

上海小胖
今天
9
0
关于AsyncTask的onPostExcute方法是否会在Activity重建过程中调用的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/XG1057415595/article/details/86774575 假设下面一种情况...

shzwork
今天
7
0
object 类中有哪些方法?

getClass(): 获取运行时类的对象 equals():判断其他对象是否与此对象相等 hashcode():返回该对象的哈希码值 toString():返回该对象的字符串表示 clone(): 创建并返此对象的一个副本 wait...

happywe
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部