亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3260 | 回復: 0
打印 上一主題 下一主題

內核kernel以及根文件系統(tǒng)rootfs是如何映射到對應的nand flash的地址的 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-02-01 13:19 |只看該作者 |倒序瀏覽

內核kernel以及根文件系統(tǒng)rootfs是如何映射到對應的nand flash的地址的
【解答】內核kernel以及根文件系統(tǒng)rootfs是如何映射到對應的nand flash的地址的
【某人問題 內核在啟動的過程中,是如何完成將本地的flash設備映射成文件系統(tǒng)的? 】
我用的是ramdisk.image.gz,燒寫在flash的0x10140000處
我不太明白內核在啟動過程中式如何將這個文件映射成/目錄及各子目錄的?
如果ramdisk.image.gz在flash中的位置發(fā)生了變化,應該如何修改內核啊?
【解答】
沒理解錯的話,ramdisk.image.gz應該是你的內核的壓縮鏡像。
你的問題,要分2方面和你解釋:
1.將這個文件映射成/目錄及各子目錄的
不是將這個文件映射根目錄成及各子目錄的,
而是對應的根文件系統(tǒng),簡稱rootfs(root file system),
對應著/根目錄及其各個子目錄和文件。
發(fā)現(xiàn)要解釋清楚,要簡單說清楚整個系統(tǒng)啟動的過程:
【系統(tǒng)啟動過程簡介】
初始化代碼讀取uboot到內存里面,然后跳轉到uboot那里去執(zhí)行uboot,
uboot初始化必要的硬件,加載一些驅動,其中包括nand flash的驅動,
然后根據(jù)你的uboot里面設置的一個啟動命令:
nand read 0x30007FC0 0x100000 0x200000;bootm 0x30007FC0
意思就是,先去讀取nand flash,從0x100000開始,長度為0x200000的數(shù)據(jù)到memory的0x30007FC0處,
然后bootm表示從memory的0x30007FC0開始運行。
也就是去運行你的內核鏡像了。
此處也就是你的ramdisk.image.gz。
而你的地址是0x10140000,所以,上面中的啟動命令,至少0x100000要改成你的地址0x10140000。
然后,內核會自己解壓縮,然后執(zhí)行,
初始化硬件,
加載驅動模塊,
最后去掛載rootfs,
而此文件系統(tǒng)是什么格式的,是從uboot里面定義的:
#define CONFIG_BOOTARGS   "root=/dev/mtdblock2 rw init=/linuxrc console=ttyS0,115200 mem=16M rootfstype=yafffs2"
并在從uboot掉轉到內核運行時候,傳遞給內核的,
這樣內核在加載rootfs的時候,才知道,要以什么格式,比如上面的yaffs2格式,
去加載此文件系統(tǒng)。
此文件系統(tǒng),也是你實現(xiàn)自己用相應的文件系統(tǒng)制作工具,制作的,然后燒寫到對應的位置的。
上面中root=/dev/mtdblock2,表示,要去/dev/mtdblock2,也就是你的mtd的第3個分區(qū),去加載。
而這里的mtd的第3個分區(qū)具體對應的nand flash中的的地址,
是你在內核中,一般是在core.c自己定義的的nand flash的分區(qū)。
一般是uboot是第一個分區(qū),內核kernel是第二個,然后就是rootfs是第三個分區(qū),也就是/dev/mtdblock2。
隨便網(wǎng)上給你找個別人的分區(qū):
static struct mtd_partition rm9200_partitions[3] =
{
        {        /* uboot 256K */
                .name = "uboot",
                .size = 0x40000,
                .offset = 0
        },
        {        /* kernel 1.768M */
                .name = "kernel",
                .size = 0x1C0000,
                .offset = 0x40000
        },
        {        /* rootfs 2M */
                .name = "rootfs",
                .size = 0x200000,
                .offset = 0x200000
        },
};
如果按照上面分區(qū),定義的/dev/mtdblock2的起始地址是0x200000,還算成大小是2M的位置,
然后,內核啟動掛載rootfs的時候,就是,以上面從uboot傳過來的參數(shù)中yaffs2格式,
到nand flash 的2M的地址讀取并加載rootfs,
加載完成后,這樣,里面對應的,你說的根目錄,以及所有的文件,文件夾就都可以識別了。
然后才會去讀取并運行初始化腳本相關的東西,
最后初始化console控制臺,然后你才能看到那個常見的#,才可以輸入命令,比如ls,才可以和系統(tǒng)交互。
所以,你說的位置或地址如何映射成/根目錄的,實際就是這個rootfs,對應著mtdblock2,
對應的某個nand flash上的地址,比如此處的2M的地方。而不是內核kernel這個文件映射的。
內核kernel,對應著是分區(qū)里面的mtdblock1,比如上面的地址0x40000。
2.
如果ramdisk.image.gz在flash中的位置發(fā)生了變化,應該如何修改內核?
如果地址變化了,那么
uboot中定義的啟動參數(shù):
nand read 0x30007FC0 0x100000 0x200000;bootm 0x30007FC0
中的0x100000就要換成你的新的地址就可以了。


本文來自ChinaUnix博客,如果查看原文請點:http://blog.chinaunix.net/u3/111397/showart_2166424.html
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP