历史上的今天
返回首页

历史上的今天

今天是:2025年03月07日(星期五)

正在发生

2019年03月07日 | 基于S3C2440的Linux内核移植和yaffs2文件系统制作--根文件系统

2019-03-07 来源:eefocus

第二章 制作根文件系统

2.1 根文件系统预备知识
嵌入式Linux中都需要构建根文件系统,构建根文件系统的规则在FHS(Filesystem Hierarchy Standard)文档中,下面是根文件系统顶层目录。

目录

内容

bin

存放所有用户都可以使用的、基本的命令。

sbin

存放的是基本的系统命令,它们用于启动系统、修复系统等。

usr

里面存放的是共享、只读的程序和数据。

proc

这是个空目录,常作为proc文件系统的挂载点。

dev

该目录存放设备文件和其它特殊文件。

etc

存放系统配置文件,包括启动文件。

lib

存放共享库和可加载块(即驱动程序),共享库用于启动系统、运行根文件系统中的可执行程序。

boot

引导加载程序使用的静态文件

home

用户主目录,包括供服务账号锁使用的主目录,如FTP

mnt

用于临时挂接某个文件系统的挂接点,通常是空目录。也可以在里面创建空的子目录。

opt

给主机额外安装软件所摆放的目录。

root

root用户的主目录

tmp

存放临时文件,通常是空目录。

var

存放可变的数据。

2.2、构建根文件按系统
2.2.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

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的权限来执行,因此需要遵照根文件系统权限位的基本规定来设计。

2.2.2、建立动态链接库
动态链接库直接用友善之臂的,先解压友善之臂的根文件包,拷贝lib的内容到新建的根文件目录lib内。

cd /mnt/hgfs/share

tar –zxvf root_qtopia.tgz –C /opt/studyarm

cp –rfd /opt/studyarm/root_qtopia/lib/* /opt/studyarm/rootfs/lib/*

2.2.3 交叉编译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->

                            []Don’t use /usr

                            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的内容。

2.2.4 建立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 "****************Studying ARM*********************"

echo "Kernel version:linux-2.6.29.1"

echo "Student:Feng dong rui"

echo "Date:2009.07.15"

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=W]#'

PATH=$PATH

HOSTNAME='/bin/hostname'

export USER LOGNAME PS1 PATH

2.2.5 制作根文件系统映像文件
使用以下命令安装好yaffs文件系统制作工具:

cd /mnt/hgfs/share

tar –zxvf mkyaffs2image.tgz –C /

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


推荐阅读

史海拾趣

Hama公司的发展小趣事

为了提升产品的市场竞争力,H&D Wireless积极寻求技术合作。20XX年,公司与全球领先的微控制器解决方案提供商爱特梅尔(Atmel)携手,共同推出了基于AVR®微控制器的IEEE802.11b+g Wi-Fi解决方案。这一合作不仅提升了H&D Wireless产品的功耗效率和连接稳定性,还显著缩短了客户的产品开发周期。通过不断优化产品性能,H&D Wireless的Wi-Fi解决方案在市场上获得了广泛认可。

Engineered Components Co公司的发展小趣事

Engineered Components Co(ECC)公司成立于XXXX年,由几位在电子制造领域有丰富经验的工程师共同创立。他们看到了电子行业中对于高质量、高精度电子元件的迫切需求,因此决定专注于此领域。ECC在创立初期就确立了以客户需求为导向,以技术创新为驱动的发展战略。他们通过自主研发,生产出了第一批高精度电子连接器,并在市场上获得了良好的反响。

Coiltronics公司的发展小趣事

随着全球化趋势的加强,Coiltronics公司开始将目光投向国际市场。公司制定了一系列国际化战略,包括在海外市场设立分支机构、与当地企业合作等。通过这些举措,Coiltronics成功将其技术和产品推向国际市场,进一步扩大了公司的业务范围。同时,国际化战略也带来了公司管理、文化等方面的变革,为公司的长远发展注入了新的活力。

Allianc公司的发展小趣事

Allianc公司成立于XXXX年,初创时期面临着资金短缺、市场竞争激烈等诸多挑战。公司创始人凭借对电子行业的深刻理解和敏锐的市场洞察力,带领团队开发出了一款具有创新性的电子产品,并成功获得了第一批订单。然而,随着市场的不断变化和竞争的加剧,公司必须不断创新和优化产品,才能保持竞争优势。在创始人的带领下,Allianc公司逐步稳定了市场地位,为后续发展奠定了坚实基础。

Antiference公司的发展小趣事

在追求经济效益的同时,Antiference公司始终不忘履行社会责任。公司积极参与环保事业,推动绿色生产,努力降低生产过程中的能耗和排放。此外,Antiference还积极投身公益事业,支持教育事业和扶贫工作,为社会做出了积极贡献。

DRI Relays Inc公司的发展小趣事

DRI Relays Inc公司成立于XX年代,当时电子继电器市场正处于快速发展阶段。公司创始人XXX凭借对市场趋势的敏锐洞察,决定投身于这一领域。然而,创业之初,公司面临资金短缺、技术瓶颈和市场竞争激烈等多重挑战。为了突破困境,XXX带领团队日夜兼程地研发新产品,不断改进技术,同时积极寻找投资者。在一次行业展会上,公司的新产品因其独特的设计和高性能吸引了众多客户的关注,为公司赢得了宝贵的订单和资金支持。

问答坊 | AI 解惑

脑电图基础知识幻灯片

这里面主要介绍了脑电图的基本知识,还有各种脑电图波形,正常脑电图的诊断标准, 异常脑电图的诊断标准,一些专有名词等。有兴趣的朋友可以下来看看!! [ 本帖最后由 charlie1982 于 2009-12-31 15:34 编辑 ]…

查看全部问答>

大家帮忙看一下这个偏移量对不对啊?

本帖最后由 paulhyde 于 2014-9-15 09:20 编辑 一个bmp图片由3大部分组成:BITMAPFILEHEADER结构体,BITMAPINFO结构体,DIB数据区。 Private Type BITMAPFILEHEADER // 14 bytes bfType As Integer bfSize As Long bfReserved1 As I ...…

查看全部问答>

vxworks 下 telnet的问题

Hi all 由于项目的需求,我想把telnet默认的shell替换成我们自己写的shell。 一般来说我们使用telnet连接目标板的时候,都会直接连接上 并出现shell的提示符-> 而我们现在需要在连接上之后出现: login: root password: ****** myshell-> my ...…

查看全部问答>

嵌入式方面都涉及哪些知识?

我马上就要开始学习嵌入式方面的知识了,之前我对嵌入式一窍不通,想在开始学习之前自己先了解一些! 想知道嵌入式方面的知识都包括什么? 我还想问一下:linux应用程序开发及相关的内容包括在嵌入式范围内么??? 先谢谢各位了!!!…

查看全部问答>

年后想换职的朋友进来看下哦^^(待遇丰厚,保证心动!!)

-精C++,嵌入式编程,Unix, MFC, Vxworks -工作经验2年以上 -学历要求本科以上 -英语听说读写熟练 薪资丰厚,有意者请尽快联系MSN;linxin710@hotmail.com…

查看全部问答>

新手一个抓狂的问题,build有错误??

我是照书上的例子定制系统的,以前能顺利编译过,后来重装了一次pb4.2,build就有 问题了,重装了几次还是不行,错误提示有: !!!!! Error building (K:\\WINCE420\\platform\\Emulator) Sysgening platform K:\\WINCE420\\platform\\Emulator !!!!! ...…

查看全部问答>

如何让板子支持U盘?

                                 MCU是STM32F107,如何让板子作为USB host支持和U盘的数据通信呢?…

查看全部问答>

可控硅问题求助

公司现在有个项目,要求使用可控硅控制交通灯,没有接触过可控硅,现在有几个问题想问问前辈们。 1.现在可控硅关断之后会有漏电流,交通灯会闪(亮度不是很明显)。R8和C6是否能去掉? 2.看到一些文章说工业电很不干净需要保护可控硅,不知道怎么 ...…

查看全部问答>

REAL6440的核心板 SMDK6410 # cannot run '/etc/init.d/rcS': No such file or

使用REAL6410的核心板,程序已经正常运行几天了,突然发现不工作了,启动时出现:SMDK6410 # cannot run \'/etc/init.d/rcS\': No such file or directory注意已经正常运行几天了,不是rcS编写错误。启动时输出如下: OK Boot with zImage Start ...…

查看全部问答>