菜单导航

Busybox编译及其yaffs2文件系制作

作者: 精装之家 来源: 精装之家 发布时间: 2019年10月17日 06:17:02

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 librarytuning->username completion、fancyshell prompts

4、makemenuconfig设置CROSSCOMPILE为arm-linux-

5、install optin-->

[*] Dont 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,这一个没有试过)

cant 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)