【移植Linux 3.4.2内核第二步】之修改系统分区
今天接著移植Linux 3.4.2內(nèi)核,接著上一篇文章(點擊查看:上一篇文章)我們完成了內(nèi)核的串口啟動打印輸出,但是無法掛載根文件系統(tǒng),我們看看啟動后顯示的是什么:
從打印結(jié)構(gòu)可以看出,我們的分區(qū)不對,在U-boot移植(點擊查看:Uboot分區(qū))中,我們已經(jīng)對整個系統(tǒng)進行分區(qū)了,現(xiàn)在打印說我們的分區(qū)不對,一定是內(nèi)核里也有分區(qū)的相關(guān)設(shè)置,我們需要去修改內(nèi)核:
在common-smdk.c中(具體怎么找到這個函數(shù),可以從串口打印找到關(guān)鍵字在內(nèi)核中搜索看看關(guān)鍵字符串在哪里出現(xiàn)過,這個技巧對于初不熟悉內(nèi)核架構(gòu)的人來說很管用),有如下函數(shù),對應的分區(qū)的設(shè)置:
將分區(qū)修改為如下這樣的:
0x00000000-0x00040000 : “bootloader”
0x00040000-0x00060000 : “params”
0x00060000-0x00260000 : “kernel”
0x00260000-0x10000000 : “root”
即改為:
注釋:如果我們之前使用的及其ID是set machid 7CF(本身使用的是set machid 16a,查看之前的文章看相關(guān)內(nèi)容:點擊查看之前的文章)那么我們需要修改的地方是:mach-mini2440.c文件(與common-smdk.c在同一個目錄)中的結(jié)構(gòu)體:
/* NAND Flash on MINI2440 board */static struct mtd_partition mini2440_default_nand_part[] __initdata = {[0] = {.name = "u-boot",.size = SZ_256K,.offset = 0,},[1] = {.name = "u-boot-env",.size = SZ_128K,.offset = SZ_256K,},[2] = {.name = "kernel",/* 5 megabytes, for a kernel with no modules* or a uImage with a ramdisk attached */.size = 0x00500000,.offset = SZ_256K + SZ_128K,},[3] = {.name = "root",.offset = SZ_256K + SZ_128K + 0x00500000,.size = MTDPART_SIZ_FULL,}, };改為:
/* NAND Flash on MINI2440 board */static struct mtd_partition mini2440_default_nand_part[] __initdata = {[0] = {.name = "bootloader",.size = SZ_256K,.offset = 0,},[1] = {.name = "params",.offset = MTDPART_OFS_APPEND,//緊接著上一個分區(qū).size = SZ_128K,},[2] = {.name = "kernel",.offset = MTDPART_OFS_APPEND,.size = SZ_2M,},[3] = {.name = "rootfs",.offset = MTDPART_OFS_APPEND,.size = MTDPART_SIZ_FULL, //剩下的所有分區(qū)} };我們這里一直使用的是set machid 16a這個機器ID。
好了:
重新編譯內(nèi)核用nfs掛載(具體方法看上一篇文章)內(nèi)核,啟動,顯示如下:
由此可知,我們的分區(qū)已經(jīng)正常了,只是還缺少文件系統(tǒng)沒有燒寫。
我們先燒寫一個簡單的文件系統(tǒng)看一下能否正常啟動系統(tǒng):
nfs 30000000 192.168.1.101:/work/nfs_root/fs_mini_mdev.yaffs2
nand erase.part rootfs
nand write.yaffs 30000000 260000 889bc0 (這個889bc0大小是文件系統(tǒng)的大小,根據(jù)實際情況修改)
燒寫文件系統(tǒng)后下載內(nèi)核啟動:
nfs 32000000 192.168.1.101:/work/nfs_root/uImage_new
bootm 32000000
發(fā)現(xiàn)還是啟動不了,顯示不支持yaffs2文件系統(tǒng),那么再試一下jffs文件系統(tǒng)是否可以:
nfs 30000000 192.168.1.101:/work/nfs_root/fs_mini_mdev.jffs2
nand erase.part rootfs
nand write.jffs2 30000000 260000 5b89a8
nfs 32000000 192.168.1.101:/work/nfs_root/uImage_new
bootm 32000000
顯示:
文件系統(tǒng)已經(jīng)掛載上去了,但是無法啟動init進程。
那么看來我們需要制作新的文件系統(tǒng)了!!!我們新的內(nèi)核不支持我們老的文件系統(tǒng)。
為了區(qū)分開,制作文件系統(tǒng),我們放到下一篇文章(點擊鏈接查看下一篇文章:點擊查看)
想一起探討以及獲得各種學習資源加我(有我博客中寫的代碼的原稿):
qq:1126137994
微信:liu1126137994
可以共同交流關(guān)于嵌入式,操作系統(tǒng),C++語言,C語言,數(shù)據(jù)結(jié)構(gòu)等技術(shù)問題。
總結(jié)
以上是生活随笔為你收集整理的【移植Linux 3.4.2内核第二步】之修改系统分区的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx中upstream的max_c
- 下一篇: stata15一键安装meta分析模块命