您的位置 首页 ADAS

Busybox编译及其yaffs2文件系制造

一、Busybox编译(版本busybox-1130)1、在环境变量中设置交叉编译器的路径(版本cross-433)2、[*]BuildBusyboxasastaticbina

一、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)

实践上,在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

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/adas/262377.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部