Busybox编译及其yaffs2文件系制作

转载 2012年03月24日 22:58:12

一、Busybox编译(版本busybox-1.13.0)

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

2、[*] BuildBusybox as a static binary (no shared libs)

3、busybox settings->busybox librarytuning->username completion、fancyshell prompts

4、makemenuconfig设置CROSSCOMPILE为arm-linux-

5、install optin-->

     [*] Don't use /usr 防止编译后生成的文件安装到主机的/usr目录下,改变了主机的系统

 6、make install即可在_install目录下生成bin sbin usr(bin,sbin)及其linuxrc文件(该文件链接到/bin/busybox)

二、yaffs2文件系统制作

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

 目录结构

 /

 |--bin (busybox产生)

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

 |--etc

| |-- init.d

 |`-- sysconfig

|-- home (手工创建用户)

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

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

|-- lib (从交叉编译工具路径拷贝cp -r 4.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/console dev
cp -a /dev/null dev
cp -a /dev/ttyS0 dev   
cp -a /dev/ttyS1 dev

(mknod -m 600console c 5 1,这一个没有试过)

can't open /dev/s3c2410_serial: No such file or director

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

 

 etc目录分析

 etc

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

|-- group (用户组)

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

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

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

|-- passwd (密码文件)

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

 `--sysconfig

`-- HOSTNAME (存放主机名)

 【fstab】

 #device mount-point type options dump fsckorder

proc /proc proc defaults 0 0

 tmpfs /tmp tmpfs defaults 0 0

sysfs /sys sysfs defaults 0 0

tmpfs /dev tmpfs defaults 0 0

 var/dev tmpfs defaults 0 0

 【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:

 sudo:*:27:

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

umask 022

 export PATH runlevel prevlevel

 

#

# Trap CTRL-C &c only in this shell sowe can interrupt subprocesse.

 

mount -a

mkdir /dev/pts

 mount -t devpts devpts /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

 879static struct uart_driver s3c24xx_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 /]#ls dev/s3c2410_serial*

dev/s3c2410_serial0 dev/s3c2410_serial1 dev/s3c2410_serial2

 【passwd】

 root::0:0:root:/:/bin/sh

 ftp::14:50:FTP User:/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:san user,,,,:/home/san:/bin/sh

 【profile】

 #Ashprofile

#vim:syntax=sh

 

 #Nocore files by default

#ulimit -S -c 0>/dev/null 2>&1

 

 USER="`id -un`"

LOGNAME=$USER

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

PATH=$PATH

 

 HOSTNAME=`/bin/hostname`

export USER LOGNAME PS1 PATH

 【sysconfig/HOSTNAME】

 yourname

 lib目录

 lib(cp -r 4.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动态库也是可以的。

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

 实际上,在linux平台上编译可执行文件,如果调用的是动态链接库,那么我们在执行的时候,需要exportLD_LIBRARY_PATH指向动态链接库的路劲,如果调用的是静态链接库,那就不用设置库的路劲了。道理都是一样的。

 3)、如果将busybox编译成静态链接的形式,且lib目录下没有相应的动态链接库(如libc.so,libm.so等),那么编译出来的可执行程序无法运行,会提示说"[程序名]:Not found",因此,一般不会将busybox编译成静态链接的形式。这个问题是在编写watchdog测试程序时发现的。

 三、使用mkyaffsimage_2制作yaffs2文件系统

 mkyaffsimage_2 myroot myroot.bin

 说明:

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

 所以,etc目录可简化为:

 

fstab

 init.d/rcS

 inittab

 sysconfig/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(具体的原因及好的解决方案还没有找到,继续研究)

uncorrectable error : <3>end_request:I/O error, dev mtdblock2, sector 0

Buffer I/O error on device mtdblock2,logical block 0

Kernel panic - not syncing: VFS: Unable tomount root fs on unknown-block(31,2)

后来无缘无故的好了(PS1='[\u@\h \W]#'(PS1='[$USER@$HOSTNAME $PWD]#')

,用后面的替换前面的,在制作文件系统,就没有出现这个问题了,但出来了新的问题,如下:)

block 1912 is bad

Partially written block 90 detected

Partially written block 90 detected

Partially written block 90 detected

Partially written block 90 detected

.

.

yaffs2的一个bug,升级一下估计能解决(通过下面介绍的方法,修改了一下源码,解决了问题)

yaffs文件系统的Partially written block detected信息

对文件系统进行一系列的操作之后,直接断电,然后重新启动后,挂载文件系统时可能会出现如下提示信息:

 yaffs: dev is 32505863 name is"mtdblock7"

yaffs: passed flags ""

yaffs: Attempting MTD mount on 31.7,"mtdblock7"

Partially written block 13 detected

Partially written block 13 detected

Partially written block 13 detected

Partially written block 13 detected

yaffs_read_super: isCheckpointed 0

 Please press Enter to activate this console.ls

[root@localhost /]#

 这种提示信息是正常的,Partially written block 在正常使用时,文件系统的垃圾收集程序将会处理。

 可以屏蔽这个信息,或者仅在YAFFS_TRACE_SCAN的时候显示这个信息,修改yaffs_guts.c文件的6668行,将

 T(YAFFS_TRACE_ALWAYS,

 (TSTR("Partially written block %ddetected" TENDSTR),

 blk));

 改为:

 

T(YAFFS_TRACE_SCAN,

 (TSTR("Partially written block %ddetected" TENDSTR),

 blk));

可以查看这个网址:http://www.yaffs.net/lurker/message/20100425.012952.08849f31.en.html

 

Busybox编译及其yaffs2文件系制作

一、Busybox编译(版本busybox-1.13.0) 1、在环境变量中设置交叉编译器 的路径(版本cross-4.3.3)2、[*] BuildBusybox as a static binar...
  • ce123
  • ce123
  • 2011年07月03日 00:44
  • 3618

busybox-1.16.0制作yaffs2文件系统

busybox-1.16.0制作yaffs2文件系统平台系统:Ubuntu-9.04    交叉编译器:gcc-3.4.1,glibc-2.3.3验证平台:S3C2440,Linux-2.6.33.6...
  • eqwewr
  • eqwewr
  • 2011年04月22日 19:38
  • 1483

busybox-1.16.0制作yaffs2文件系统

转载:http://blog.chinaunix.net/uid-23254875-id-340995.html

用busybox制作yaffs2文件系统

使用的工具:busybox-1.15.2.tar.bz2(官网下载地址) 编译工具:arm-linux-gcc4.1.2  《》创建根文件系统目录,主要包括以下目录 /bin, /etc, /de...

利用busybox制作yaffs2 根文件系统镜像

编译busybox需要用arm-linux-gcc3.XX 编译器,用 arm-unknown-linx-gnueabi-gcc会出问题。1.从htt...

利用busybox制作yaffs2文件系统

利用busybox制作yaffs2文件系统 2010-11-06 14:04:24 分类: 嵌入式 平台:Vmware-7.1.4 ,Ubuntu 10.04 ...
  • metuu
  • metuu
  • 2013年10月24日 15:45
  • 577

jz2440 根文件系统 移植(yaffs2、busybox部分)

后续内核执行流程: start_kernel          setup_arch      //解析u-boot传入的启动参数 setup_command_line  //解析u-boot传...

基于busybox1.19.3移植yaffs2文件系统至OK6410A开发板

一、下载busybox http://busybox.net/downloads/busybox-1.19.3.tar.bz2   二、解压busybox源码,修改Makefile # tar...
  • caoyhok
  • caoyhok
  • 2011年12月16日 12:28
  • 701

使用Busybox1.13.3制作yaffs2根文件系统

使用Busybox1.13.3制作yaffs2根文件系统(hlhq转)2009-09-25 21:532009-09-13 14:42(从hlhq转来)准备工具1:mkyaffs2image用途:用来...

Busybox1.13.3制作yaffs2根文件系统(静态和动态)

准备工具1:mkyaffs2image 用途:用来制作目标文件系统映像。 工具2:busybox 用途:生成目标文件系统。网上有对它的介绍。 以上工具均来自友善之臂http://www.arm...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Busybox编译及其yaffs2文件系制作
举报原因:
原因补充:

(最多只允许输入30个字)