在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁 > 嵌入式系統(tǒng) > 設計應用 > ARM 內(nèi)核移植中常見的錯誤

            ARM 內(nèi)核移植中常見的錯誤

            作者: 時間:2016-11-11 來源:網(wǎng)絡 收藏
            1.下載linux-2.6.36.1.tar.bz2
            問題:tar -zxvf 解壓壓縮文件出現(xiàn)問題,無法識別.
            解決:1.通過file linux-2.6.36.1.tar.bz2 查看壓縮格式
            2.通過命令 bzip2 -d linux-2.6.36.1.tar.bz2解壓
            3.再通過tar xvf linux-2.6.36.1.tar解壓,不能使用
            tar zxvf linux-2.6.22.6.tar解壓
            4.上面也可以通過一條指令bzip2 -dc linux-2.6.XX.tar.bz2 | tar xvf -
            其中XX為內(nèi)核壓縮包文件名

            2.下載patch-2.6.36.1.bz2補丁文件
            1.解壓 bzip2 -d patch-2.6.36.1.bz2
            2.cd linux-2.6.36.1/
            3.patch -p1 < ../patch-2.6.36.1

            3.先編譯看下內(nèi)核有沒有問題,運行make命令出現(xiàn)下面的錯誤:
            問題:drivers/input/touchscreen/eeti_ts.c:65: 錯誤: 隱式聲明函數(shù)‘irq_to_gpio’
            解決:重新make menuconfig,將driver中的輸入設備->觸摸設備中,將EETI選項不選,保存退出后,重新make.

            4.將編譯成功的內(nèi)核zImage下載到板子中,出現(xiàn)如下問題:
            問題:NOW, Booting Linux......
            Uncompressing Linux... done, booting the kernel.
            然后沒有反應....
            解決:1.Device Drivers--->Character devices--->Serial drivers
            下,選擇:Samsung SoC serial support
            Support for console on Samsung SoC serial port
            Samsung S3C2440/S3C2442 Serial port support
            2.發(fā)現(xiàn)對應選項在Device Drivers->Character devices->Serial drivers中
            一看,原來根本就沒有加載Samsung SoC serial support , 選成靜態(tài)編譯之后又出現(xiàn)了
            Support for console on Samsung SoC serial port ,就是它了,選上, 退出的時候順便把
            Kernel low-level debugging functions給取消了否則我們設置的printk會自行輸出,就不知道ttySAC有沒有加載成功了
            3.最后發(fā)現(xiàn)原來時內(nèi)核編譯時需要傳入一個啟動命令:noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,
            make menuconfig -> Boot options -> 第三行添加上面的啟動命令,保存退出,啟動成功~

            5.啟動過程中,出現(xiàn)問題:
            問題:Unable to handle kernel NULL pointer dereference at virtual address 00000000
            pgd = c0004000
            [00000000] *pgd=00000000
            Internal error: Oops: 80000005 [#1]
            last sysfs file:
            Modules linked in:
            CPU: 0Not tainted(2.6.36.1 #20)
            PC is at 0x0
            LR is at s3c_gpio_setpull+0x80/0x8c
            解決:參考網(wǎng)址:http://blog.csdn.net/ExclusivePig/archive/2010/10/24/5961869.aspx
            將static inline int s3c_gpio_do_setpull函數(shù)修改為以下內(nèi)容:
            static inline int s3c_gpio_do_setpull(struct s3c_gpio_chip *chip,
            unsigned int off, s3c_gpio_pull_t pull)
            {
            if(NULL != chip->config->set_pull)
            return (chip->config->set_pull)(chip, off, pull);
            else
            return EINVAL;
            }

            6.內(nèi)核終于啟動起來了,但是接著又出現(xiàn)了下面的問題:
            問題:List of all partitions:
            1f00 256 mtdblock0 (driver?)
            1f0164 mtdblock1 (driver?)
            1f022048 mtdblock2 (driver?)
            1f03 63152 mtdblock3 (driver?)
            1f04 65536 mtdblock4 (driver?)
            No filesystem could mount root, tried:cramfs
            Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2)
            解決:原來是沒有添加YAFFS2文件系統(tǒng),從網(wǎng)上下載,給內(nèi)核打上補丁,重新make menuconfig,在file system中選擇YAFFS2,重新make.
            打補丁如下:./patch-ker.sh c /work/system/linux-2.6.36.1

            7.編譯出現(xiàn)問題,最新內(nèi)核去掉了一些函數(shù),和改變了一些函數(shù)的名字,致使YAFFS2在編譯過程中出現(xiàn)錯誤。
            解決:請參考:http://www.linuxhq.com/kernel/v2.6/36-rc1/fs/attr.c

            8.再次下載編譯好的內(nèi)核,運行出現(xiàn)下面問題:
            問題:yaffs: dev is 32505858 name is "mtdblock2"
            yaffs: passed flags ""
            yaffs: Attempting MTD mount on 31.2, "mtdblock2"
            yaffs_read_super: isCheckpointed 0
            VFS: Mounted root (yaffs filesystem) readonly on device 31:2.
            devtmpfs: error mounting -2
            Freeing init memory: 120K
            Failed to execute /linuxrc.Attempting defaults...
            Kernel panic - not syncing: No init found.Try passing init= option to kernel.
            解決:1.啟動命令有問題,根據(jù)查看分區(qū)信息(supervivi:part show)得知root分區(qū)在mtdblock3上,不是在2上
            修改為:noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0
            2.問題依舊,重新make menuconfig,并對比友善之臂提供的mini2440源代碼配置,重新選擇,
            Device Driver ->Generic Driver Options ->(取消)devtmpfs: error mounting -2被解決了,
            但是依然無法啟動繼續(xù)查看。
            3.系統(tǒng)在啟動過程中出現(xiàn)了很多yaffs: block 456 is marked bad,block 457 is bad這樣的錯誤,越來越多,通過網(wǎng)上搜尋找到解決辦法:
            我用的是板子自帶的supervivi,使用命令bon part 0,就起到格式化整個Nand Flash芯片的作用,假壞塊自然就化為烏有了。隨后問題就柳暗花明。
            4.將mini2440自帶的文件系統(tǒng)重新燒如板子,用mini2440自帶的內(nèi)核文件啟動,正常,說明文件系統(tǒng)沒有問題,將自己編譯的內(nèi)核下載進去,依然無法啟動,
            5.添加一些內(nèi)核輸出信息,終于發(fā)現(xiàn)內(nèi)核在:search_binary_handler()函數(shù)中的fn(bprm, regs)函數(shù)后,執(zhí)行失敗了。非常郁悶...
            6.文件系統(tǒng)沒有問題,顯然還是內(nèi)核編譯有問題,然后通過網(wǎng)上查找說是load_elf_binary執(zhí)行有問題,可能是加載文件系統(tǒng)的文件時不識別文件格式,于是
            重新make menuconfig最后發(fā)現(xiàn)原來是要將General setup--->Choose SLAB allocator --->選上SLAB,不要選擇SLUB。重新make


            關鍵詞: ARM內(nèi)核移

            評論


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

            關閉