Busybox编译及其yaffs2文件系制作

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

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

2、make menuconfig设置CROSS COMPILE为arm-linux-

3、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

|-- console (mknod console c 5 1)
`-- null  (mknod null c 1 3)

 

etc目录分析

 

etc

|-- fstab (指明需挂载的文件系统)
|-- group (用户组)
|-- init.d (启动文件目录)
|   `-- rcS (存放系统启动时配置以及自启动加载的进程等)
|-- inittab (init进程的配置文件)
|-- passwd (密码文件)
|-- profile (用户环境配置文件)
`-- sysconfig
    `-- HOSTNAME (存放主机名)

【fstab】

#device    mount-point type options dump fsck order
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 so we 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
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]*/

 

$vim drivers/serial/samsung.c

 

 879 static 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:Linux User,,,,:/home/sky:/bin/sh
san::530:503:san user,,,,:/home/san:/bin/sh

 

【profile】

#Ash profile
#vim:syntax=sh

#No core files by default
#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

 

【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平台上编译可执行文件,如果调用的是动态链接库,那么我们在执行的时候,需要export LD_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整合测试。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值