Busybox编译及其yaffs2文件系统制作精.docx

上传人:b****3 文档编号:11807614 上传时间:2023-06-02 格式:DOCX 页数:10 大小:19.15KB
下载 相关 举报
Busybox编译及其yaffs2文件系统制作精.docx_第1页
第1页 / 共10页
Busybox编译及其yaffs2文件系统制作精.docx_第2页
第2页 / 共10页
Busybox编译及其yaffs2文件系统制作精.docx_第3页
第3页 / 共10页
Busybox编译及其yaffs2文件系统制作精.docx_第4页
第4页 / 共10页
Busybox编译及其yaffs2文件系统制作精.docx_第5页
第5页 / 共10页
Busybox编译及其yaffs2文件系统制作精.docx_第6页
第6页 / 共10页
Busybox编译及其yaffs2文件系统制作精.docx_第7页
第7页 / 共10页
Busybox编译及其yaffs2文件系统制作精.docx_第8页
第8页 / 共10页
Busybox编译及其yaffs2文件系统制作精.docx_第9页
第9页 / 共10页
Busybox编译及其yaffs2文件系统制作精.docx_第10页
第10页 / 共10页
亲,该文档总共10页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Busybox编译及其yaffs2文件系统制作精.docx

《Busybox编译及其yaffs2文件系统制作精.docx》由会员分享,可在线阅读,更多相关《Busybox编译及其yaffs2文件系统制作精.docx(10页珍藏版)》请在冰点文库上搜索。

Busybox编译及其yaffs2文件系统制作精.docx

Busybox编译及其yaffs2文件系统制作精

一、Busybox编译(版本busybox-1.13.0

1、在环境变量中设置交叉编译器的路径(版本cross-4.3.3

2、[*]BuildBusyboxasastaticbinary(nosharedlibs

3、busyboxsettings->busyboxlibrarytuning->usernamecompletion、fancyshellprompts

4、makemenuconfig设置CROSSCOMPILE为arm-linux-

5、installoptin-->

[*]Don'tuse/usr防止编译后生成的文件安装到主机的/usr目录下,改变了主机的系统6、makeinstall即可在_install目录下生成binsbinusr(bin,sbin及其linuxrc文件(该文件链接

到/bin/busybox

二、yaffs2文件系统制作

将_install目录下的文件拷贝至~/myroot文件夹下,按如下结构创建目录,并在相应目录下添加如下内容:

目录结构

/

|--bin(busybox产生

|--dev(设备名由mknod创建

|--etc

||--init.d

|`--sysconfig

|--home(手工创建用户

||--san(空与passwd文件对应

|`--sky(空与passwd文件对应

|--lib(从交叉编译工具路径拷贝cp-r4.3.3/arm-none-linux-gnueabi/libc/armv4t/lib/*so*lib-a|--mnt(空

|--proc(空

|--root(空

|--sbin(busybox产生

|--sys(空

|--tmp(空

|--usr(busybox产生

||--bin(busybox产生

||--lib(busybox产生?

|`--sbin(busybox产生

`--var(空

dev目录分析

dev

|--cp-a/dev/consoledev

cp-a/dev/nulldev

cp-a/dev/ttyS0dev

cp-a/dev/ttyS1dev

(mknod-m600consolec51,这一个没有试过

can'topen/dev/s3c2410_serial:

Nosuchfileordirector

/dev目录下的console没有弄好就会出现这个问题,最简单的办法就是直接复制过来,具体的机理有待进一步研究

etc目录分析

etc

|--fstab(指明需挂载的文件系统

|--group(用户组

|--init.d(启动文件目录

|`--rcS(存放系统启动时配置以及自启动加载的进程等

|--inittab(init进程的配置文件

|--passwd(密码文件

|--profile(用户环境配置文件

`--sysconfig

`--HOSTNAME(存放主机名

【fstab】

#devicemount-pointtypeoptionsdumpfsckorder

proc/procprocdefaults00

tmpfs/tmptmpfsdefaults00

sysfs/syssysfsdefaults00

tmpfs/devtmpfsdefaults00

var/devtmpfsdefaults00

【group】

root:

*:

0:

daemon:

*:

1:

bin:

*:

2:

sys:

*:

3:

adm:

*:

4:

tty:

*5:

disk:

*:

6:

lp:

*:

7:

mail:

*:

8:

news:

*:

9:

uucp:

*:

10:

proxy:

*:

13:

kmem:

*:

15:

dialout:

*:

20:

fax:

*:

21:

voice:

*:

22:

cdrom:

*:

24:

floopy:

*:

25:

tape:

*:

26:

audio:

*:

29:

ppp:

x:

99:

500:

x:

500:

sky

501:

x:

501:

sky

【init.d/rcS】

#!

/bin/sh

PATH=/sbin:

/bin:

/usr/sbin:

/usr/bin

runlevel=S

prevlevel=N

umask022

exportPATHrunlevelprevlevel

#

#TrapCTRL-C&conlyinthisshellsowecaninterruptsubprocesse.

mount-a

mkdir/dev/pts

mount-tdevptsdevpts/dev/pts

echo/sbin/mdev>/proc/sys/kernel/hotplug

mdev-s

mkdir-p/var/lock

/bin/hostname-F/etc/sysconfig/HOSTNAME

【inittab】

#/etc/inittab

:

:

sysinit:

/etc/init.d/rcS

console:

:

askfirst:

-/bin/sh(s3c2410_serial0:

:

askfirst:

-/bin/sh

:

:

ctrlaltdel:

/sbin/reboot

:

:

shutdown:

/bin/umount-a-r

s3c2410_serial为串口设备号,名称必须与drivers/serial/samsung.c一致,或则,系统启动时无法找到串口!

!

/*注意s3c2410上串口的设备名称是/dev/s3c2410_serial[0..3]*/

$vimdrivers/serial/samsung.c

879staticstructuart_drivers3c24xx_uart_drv={

880.owner=THIS_MODULE,

881.dev_name="s3c2410_serial",

882.nr=CONFIG_SERIAL_SAMSUNG_UARTS,

883.cons=S3C24XX_SERIAL_CONSOLE,

884.driver_name=S3C24XX_SERIAL_NAME,

885.major=S3C24XX_SERIAL_MAJOR,

886.minor=S3C24XX_SERIAL_MINOR,

887};

[root@Sanux/]#lsdev/s3c2410_serial*

dev/s3c2410_serial0dev/s3c2410_serial1dev/s3c2410_serial2【passwd】

root:

:

0:

0:

root:

/:

/bin/sh

ftp:

:

14:

50:

FTPUser:

/var/ftp:

bin:

*:

1:

1:

bin:

/bin

daemon:

*:

2:

2:

daemon:

/sbin:

nobody:

*:

99:

99:

Nobody:

/:

sky:

:

520:

502:

LinuxUser,,,,:

/home/sky:

/bin/sh

san:

:

530:

503:

sanuser,,,,:

/home/san:

/bin/sh

【profile】

#Ashprofile

#vim:

syntax=sh

#Nocorefilesbydefault

#ulimit-S-c0>/dev/null2>&1

USER="`id-un`"

LOGNAME=$USER

PS1='[\u@\h\W]#'(PS1='[$USER@$HOSTNAME$PWD]#'PATH=$PATH

HOSTNAME=`/bin/hostname`

exportUSERLOGNAMEPS1PATH

【sysconfig/HOSTNAME】

yourname

lib目录

lib(cp-r4.3.3/arm-none-linux-gnueabi/libc/armv4t/lib/*so*lib-a|--ld-2.8.so

|--ld-linux.so.3->ld-2.8.so

|--libBrokenLocale-2.8.so

|--libBrokenLocale.so.1->libBrokenLocale-2.8.so

|--libSDL-1.2.so.0->libSDL-1.2.so.0.11.0

|--libSDL-1.2.so.0.11.0

|--libSDL-1.2.so.0.11.2

|--libSDL.so->libSDL-1.2.so.0.11.0

|--libSegFault.so

|--libanl-2.8.so

|--libanl.so.1->libanl-2.8.so

|--libc-2.8.so

|--libc.so.6->libc-2.8.so

|--libcidn-2.8.so

|--libcidn.so.1->libcidn-2.8.so

|--libcrypt-2.8.so

|--libcrypt.so.1->libcrypt-2.8.so

|--libdl-2.8.so

|--libdl.so.2->libdl-2.8.so

|--libgcc_s.so->libgcc_s.so.1

|--libgcc_s.so.1

|--libm-2.8.so

|--libm.so.6->libm-2.8.so

|--libmemusage.so

|--libnsl-2.8.so

|--libnsl.so.1->libnsl-2.8.so

|--libnss_compat-2.8.so

|--libnss_compat.so.2->libnss_compat-2.8.so

|--libnss_dns-2.8.so

|--libnss_dns.so.2->libnss_dns-2.8.so

|--libnss_files-2.8.so

|--libnss_files.so.2->libnss_files-2.8.so

|--libnss_hesiod-2.8.so

|--libnss_hesiod.so.2->libnss_hesiod-2.8.so

|--libnss_nis-2.8.so

|--libnss_nis.so.2->libnss_nis-2.8.so

|--libnss_nisplus-2.8.so

|--libnss_nisplus.so.2->libnss_nisplus-2.8.so

|--libpcprofile.so

|--libpthread-2.8.so

|--libpthread.so.0->libpthread-2.8.so

|--libresolv-2.8.so

|--libresolv.so.2->libresolv-2.8.so

|--librt-2.8.so

|--librt.so.1->librt-2.8.so

|--libsqlite3.so->libsqlite3.so.0.8.6

|--libsqlite3.so.0->libsqlite3.so.0.8.6

|--libsqlite3.so.0.8.6

|--libthread_db-1.0.so

|--libthread_db.so.1->libthread_db-1.0.so

|--libutil-2.8.so

`--libutil.so.1->libutil-2.8.so

说明:

linuxrc执行时会依赖lib库文件

1、如果将busybox编译成动态链接的形式,没有lib动态库或者缺少相应的库文件,那么linux会提示无法执行或者找不到相应的库。

2、如果将busybox编译成静态链接的形式(实际就是调用编译器的静态链接库来编译可执行文件,没有lib动态库也是可以的。

[*]BuildBusyboxasastaticbinary(nosharedlibs

实际上,在linux平台上编译可执行文件,如果调用的是动态链接库,那么我们在执行的

时候,需要exportLD_LIBRARY_PATH指向动态链接库的路劲,如果调用的是静态链接库,那就不用设置库的路劲了。

道理都是一样的。

3、如果将busybox编译成静态链接的形式,且lib目录下没有相应的动态链接库(如libc.so,libm.so等,那么编译出来的可执行程序无法运行,会提示说"[程序名]:

Notfound",因此,一般不会将busybox编译成静态链接的形式。

这个问题是在编写watchdog测试程序时发现的。

三、使用mkyaffsimage_2制作yaffs2文件系统mkyaffsimage_2myrootmyroot.bin说明:

1、在实际的嵌入是系统中,产品发行后,一般都不会使用终端登录的功能(除非返厂维修,debug时要用到,所以在终端登录时没必要设置密码,也没必要要bash。

所以,etc目录可简化为:

fstabinit.d/rcSinittabsysconfig/HOSTNAME这样在终端登录后的提示符为“#”,而不会有用户名、主机名。

在移植Android系统时,也按这种方法制作系统就可以了。

2、编译好内核,制作好文件系统后,我们的Linux系统是可以正常跑起来了,终端也可以使用命令了,但是,如果要做产品研发,离成品的要求还很远很远!

除了做嵌入式学习,可以接受现在的情况,用户是绝对不会买这样的产品的。

我们好要做下面一些工作:

a、驱动移植(BSP:

没有驱动,LCD,USB,WIFI,声卡,显卡等许多外设都无法使用,AP也不可能跑在上面。

b、Framewor修改:

如sdcard挂载,屏幕旋转,屏幕校准,恢复出厂设置等。

c、BSP、Framework与AP整合测试,并修改其中的大象Bug:

在测试的过程中,肯定会发现大量的Bug,这是完全可以预料的。

其中有一些是AP的问题,有些是Framework或BSP的问题,但是在实际的开发中,Bug往往都会是相互关联的,可能是AP的一个程序,发现了Framework或BSP的问题,Framework或BSP却无法发现。

但所以,要真正让BSP,Framework达到完美,那就一定要与AP整合测试。

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++console输入reboot或powerdown后,GT2440挂载不了yaffs2(具体的原因及好的解决方案还没有找到,继续研究)uncorrectableerror:

<3>end_request:

I/Oerror,devmtdblock2,sector0BufferI/Oerrorondevicemtdblock2,logicalblock0Kernelpanic-notsyncing:

VFS:

Unabletomountrootfsonunknown-block(31,2后来无缘无故的好了(PS1='[\u@\h\W]#'(PS1='[$USER@$HOSTNAME$PWD]#',用后面的替换前面的,在制作文件系统,就没有出现这个问题了,但出来了新的问题,如下:

)block1912isbad

Partiallywrittenblock90detectedPartiallywrittenblock90detectedPartiallywrittenblock90detectedPartiallywrittenblock90detected.......yaffs2的一个bug,升级一下估计能解决(通过下面介绍的方法,修改了一下源码,解决了问题)yaffs文件系统的Partiallywrittenblockdetected信息对文件系统进行一系列的操作之后,直接断电,然后重新启动后,挂载文件系统时可能会出现如下提示信息:

yaffs:

devis32505863nameis"mtdblock7"yaffs:

passedflags""yaffs:

AttemptingMTDmounton31.7,"mtdblock7"Partiallywrittenblock13detectedPartiallywrittenblock13detectedPartiallywrittenblock13detectedPartiallywrittenblock13detectedyaffs_read_super:

isCheckpointed0PleasepressEntertoactivatethisconsole.ls[root@localhost/]#这种提示信息是正常的,Partiallywrittenblock在正常使用时,文件系统的垃圾收集程序将会处理。

可以屏蔽这个信息,或者仅在YAFFS_TRACE_SCAN的时候显示这个信息,修改yaffs_guts.c文件的6668行,将T(YAFFS_TRACE_ALWAYS,(TSTR("Partiallywrittenblock%ddetected"TENDSTR,blk;改为:

T(YAFFS_TRACE_SCAN,(TSTR("Partiallywrittenblock%ddetected"TENDSTR,blk;可以查看这个网址:

849f31.en.html

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2