在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > Busybox編譯及其yaffs2文件系制作

            Busybox編譯及其yaffs2文件系制作

            作者: 時(shí)間:2016-11-22 來(lái)源:網(wǎng)絡(luò) 收藏

            一、Busybox編譯(版本busybox-1.13.0)

            1、在環(huán)境變量中設(shè)置交叉編譯器 的路徑(版本cross-4.3.3)

            本文引用地址:http://www.biyoush.com/article/201611/319973.htm

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

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

            4、makemenuconfig設(shè)置CROSSCOMPILE為arm-linux-

            5、install optin-->

            [*] Dont use /usr 防止編譯后生成的文件安裝到主機(jī)的/usr目錄下,改變了主機(jī)的系統(tǒng)

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

            二、yaffs2文件系統(tǒng)制作

            將_install目錄下的文件拷貝至~/myroot文件夾下,按如下結(jié)構(gòu)創(chuàng)建目錄,并在相應(yīng)目錄下添加如下內(nèi)容:

            目錄結(jié)構(gòu)

            /

            |--bin (busybox產(chǎn)生)

            |-- dev (設(shè)備名由mknod創(chuàng)建)

            |--etc

            | |-- init.d

            |`-- sysconfig

            |-- home (手工創(chuàng)建用戶)

            | |-- san (空)與passwd文件對(duì)應(yīng)

            | `-- sky (空)與passwd文件對(duì)應(yīng)

            |-- lib (從交叉編譯工具路徑拷貝cp -r 4.3.3/arm-none-linux-gnueabi/libc/armv4t/lib/*so*lib -a)

            |-- mnt (空)

            |-- proc (空)

            |-- root (空)

            |-- sbin (busybox產(chǎn)生)

            |-- sys (空)

            |-- tmp (空)

            |-- usr (busybox產(chǎn)生)

            ||-- bin (busybox產(chǎn)生)

            | |-- lib (busybox產(chǎn)生?)

            | `-- sbin (busybox產(chǎn)生)

            `-- 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,這一個(gè)沒(méi)有試過(guò))

            cant open /dev/s3c2410_serial: No such file or director

            /dev目錄下的console沒(méi)有弄好 就會(huì)出現(xiàn)這個(gè)問(wèn)題,最簡(jiǎn)單的辦法就是直接復(fù)制過(guò)來(lái),具體的機(jī)理有待進(jìn)一步研究

            etc目錄分析

            etc

            |-- fstab (指明需掛載的文件系統(tǒng))

            |-- group (用戶組)

            |-- init.d (啟動(dòng)文件目錄)

            | `-- rcS (存放系統(tǒng)啟動(dòng)時(shí)配置以及自啟動(dòng)加載的進(jìn)程等)

            |-- inittab (init進(jìn)程的配置文件)

            |-- passwd (密碼文件)

            |-- profile (用戶環(huán)境配置文件)

            `--sysconfig

            `-- HOSTNAME (存放主機(jī)名)

            【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為串口設(shè)備號(hào),名稱必須與drivers/serial/samsung.c一致,或則,系統(tǒng)啟動(dòng)時(shí)無(wú)法找到串口!!

            /*注意s3c2410上串口的設(shè)備名稱是/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};

            系統(tǒng)啟動(dòng)后

            [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

            說(shuō)明:linuxrc執(zhí)行時(shí)會(huì)依賴lib庫(kù)文件

            1)、如果將busybox編譯成動(dòng)態(tài)鏈接的形式,沒(méi)有l(wèi)ib動(dòng)態(tài)庫(kù)或者缺少相應(yīng)的庫(kù)文件,那么linux會(huì)提示無(wú)法執(zhí)行或者找不到相應(yīng)的庫(kù)。

            2)、如果將busybox編譯成靜態(tài)鏈接的形式(實(shí)際就是調(diào)用編譯器的靜態(tài)鏈接庫(kù)來(lái)編譯可執(zhí)行文件),沒(méi)有l(wèi)ib動(dòng)態(tài)庫(kù)也是可以的。

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

            實(shí)際上,在linux平臺(tái)上編譯可執(zhí)行文件,如果調(diào)用的是動(dòng)態(tài)鏈接庫(kù),那么我們?cè)趫?zhí)行的時(shí)候,需要exportLD_LIBRARY_PATH指向動(dòng)態(tài)鏈接庫(kù)的路勁,如果調(diào)用的是靜態(tài)鏈接庫(kù),那就不用設(shè)置庫(kù)的路勁了。道理都是一樣的。

            3)、如果將busybox編譯成靜態(tài)鏈接的形式,且lib目錄下沒(méi)有相應(yīng)的動(dòng)態(tài)鏈接庫(kù)(如libc.so,libm.so等),那么編譯出來(lái)的可執(zhí)行程序無(wú)法運(yùn)行,會(huì)提示說(shuō)"[程序名]:Not found",因此,一般不會(huì)將busybox編譯成靜態(tài)鏈接的形式。這個(gè)問(wèn)題是在編寫watchdog測(cè)試程序時(shí)發(fā)現(xiàn)的。

            三、使用mkyaffsimage_2制作yaffs2文件系統(tǒng)

            mkyaffsimage_2 myroot myroot.bin

            說(shuō)明:

            1)、在實(shí)際的嵌入是系統(tǒng)中,產(chǎn)品發(fā)行后,一般都不會(huì)使用終端登錄的功能(除非返廠維修,debug時(shí)要用到),所以在終端登錄時(shí)沒(méi)必要設(shè)置密碼,也沒(méi)必要要bash。

            所以,etc目錄可簡(jiǎn)化為:

            fstab

            init.d/rcS

            inittab

            sysconfig/HOSTNAME

            這樣在終端登錄后的提示符為“#”,而不會(huì)有用戶名、主機(jī)名。

            在移植Android系統(tǒng)時(shí),也按這種方法制作系統(tǒng)就可以了。

            2)、編譯好內(nèi)核,制作好文件系統(tǒng)后,我們的Linux系統(tǒng)是可以正常跑起來(lái)了,終端也可以使用命令了,但是,如果要做產(chǎn)品研發(fā),離成品的要求還很遠(yuǎn)很遠(yuǎn)!除了做嵌入式學(xué)習(xí),可以接受現(xiàn)在的情況,用戶是絕對(duì)不會(huì)買這樣的產(chǎn)品的。

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

            a)、驅(qū)動(dòng)移植(BSP):沒(méi)有驅(qū)動(dòng),LCD,USB,WIFI,聲卡,顯卡等許多外設(shè)都無(wú)法使用,AP也不可能跑在上面。

            b)、Framewor修改:如sdcard掛載,屏幕旋轉(zhuǎn),屏幕校準(zhǔn),恢復(fù)出廠設(shè)置等。

            c)、BSP、Framework與AP整合測(cè)試,并修改其中的大象Bug:在測(cè)試的過(guò)程中,肯定會(huì)發(fā)現(xiàn)大量的Bug,這是完全可以預(yù)料的。其中有一些是AP的問(wèn)題,有些是Framework或BSP的問(wèn)題,但是在實(shí)際的開(kāi)發(fā)中,Bug往往都會(huì)是相互關(guān)聯(lián)的,可能是AP的一個(gè)程序,發(fā)現(xiàn)了Framework或BSP的問(wèn)題,但Framework或BSP卻無(wú)法發(fā)現(xiàn)。所以,要真正讓BSP,F(xiàn)ramework達(dá)到完美,那就一定要與AP整合測(cè)試。

            ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

            console輸入reboot或powerdown后,GT2440掛載不了yaffs2(具體的原因及好的解決方案還沒(méi)有找到,繼續(xù)研究)

            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)

            后來(lái)無(wú)緣無(wú)故的好了(PS1=[u@h W]#(PS1=[$USER@$HOSTNAME $PWD]#)

            ,用后面的替換前面的,在制作文件系統(tǒng),就沒(méi)有出現(xiàn)這個(gè)問(wèn)題了,但出來(lái)了新的問(wèn)題,如下:)

            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的一個(gè)bug,升級(jí)一下估計(jì)能解決(通過(guò)下面介紹的方法,修改了一下源碼,解決了問(wèn)題)

            yaffs文件系統(tǒng)的Partially written block detected信息

            對(duì)文件系統(tǒng)進(jìn)行一系列的操作之后,直接斷電,然后重新啟動(dòng)后,掛載文件系統(tǒng)時(shí)可能會(huì)出現(xiàn)如下提示信息:

            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 在正常使用時(shí),文件系統(tǒng)的垃圾收集程序?qū)?huì)處理。

            可以屏蔽這個(gè)信息,或者僅在YAFFS_TRACE_SCAN的時(shí)候顯示這個(gè)信息,修改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));

            可以查看這個(gè)網(wǎng)址:http://www.yaffs.net/lurker/message/20100425.012952.08849f31.en.html



            關(guān)鍵詞: Busybox編譯yaffs2文件系制

            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉