日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > windows >内容正文

windows

内核kernel以及根文件系统rootfs是如何映射到对应的nand flash的

發(fā)布時(shí)間:2023/12/10 windows 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内核kernel以及根文件系统rootfs是如何映射到对应的nand flash的 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
?原文
初始化代碼讀取uboot到內(nèi)存里面,然后跳轉(zhuǎn)到uboot那里去執(zhí)行uboot,uboot初始化必要的硬件,加載一些驅(qū)動(dòng),其中包括nand flash的驅(qū)動(dòng),然后根據(jù)uboot里面設(shè)置的一個(gè)啟動(dòng)命令 TAG: NAND??rootfs??Flash??

【系統(tǒng)啟動(dòng)過程簡介】
初始化代碼讀取uboot到內(nèi)存里面,然后跳轉(zhuǎn)到uboot那里去執(zhí)行uboot,uboot初始化必要的硬件,加載一些驅(qū)動(dòng),其中包括nand flash的驅(qū)動(dòng),然后根據(jù)uboot里面設(shè)置的一個(gè)啟動(dòng)命令:

nand read 0x30007FC0 0x100000 0x200000;bootm 0x30007FC0
意思就是,先去讀取nand flash,從0x100000開始,長度為0x200000的數(shù)據(jù)到memory的0x30007FC0處,然后bootm表示從memory的0x30007FC0開始運(yùn)行。
也就是去運(yùn)行內(nèi)核鏡像了。
然后,內(nèi)核會(huì)自己解壓縮,然后執(zhí)行,
初始化硬件,
加載驅(qū)動(dòng)模塊,
最后去掛載rootfs,
而此文件系統(tǒng)是什么格式的,是從uboot里面定義的:
#define CONFIG_BOOTARGS?? "root=/dev/mtdblock2 rw init=/linuxrc console=ttyS0,115200 mem=16M rootfstype=yafffs2"
并在從uboot掉轉(zhuǎn)到內(nèi)核運(yùn)行時(shí)候,傳遞給內(nèi)核的,這樣內(nèi)核在加載rootfs的時(shí)候,才知道,要以什么格式,比如上面的yaffs2格式,去加載此文件系統(tǒng)。
此文件系統(tǒng),也是你實(shí)現(xiàn)自己用相應(yīng)的文件系統(tǒng)制作工具,制作的,然后燒寫到對(duì)應(yīng)的位置的。
上面中root=/dev/mtdblock2,表示,要去/dev/mtdblock2,也就是mtd的第3個(gè)分區(qū),去加載。
而這里的mtd的第3個(gè)分區(qū)具體對(duì)應(yīng)的nand flash中的的地址,是你在內(nèi)核中,一般是在core.c自己定義的的nand flash的分區(qū)。
一般是uboot是第一個(gè)分區(qū),內(nèi)核kernel是第二個(gè),然后就是rootfs是第三個(gè)分區(qū),也就是/dev/mtdblock2。
例如分區(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的位置,然后,內(nèi)核啟動(dòng)掛載rootfs的時(shí)候,就是,以上面從uboot傳過來的參數(shù)中yaffs2格式,到nand flash 的2M的地址讀取并加載rootfs,加載完成后,這樣,里面對(duì)應(yīng)的根目錄,以及所有的文件,文件夾就都可以識(shí)別了。
然后才會(huì)去讀取并運(yùn)行初始化腳本相關(guān)的東西,最后初始化console控制臺(tái),然后才能看到那個(gè)常見的#,才可以輸入命令,比如ls,才可以和系統(tǒng)交互。

所以,實(shí)際就是這個(gè)rootfs,對(duì)應(yīng)著mtdblock2,對(duì)應(yīng)的某個(gè)nand flash上的地址,比如此處的2M的地方。而不是內(nèi)核kernel這個(gè)文件映射的。

(hainei_)

總結(jié)

以上是生活随笔為你收集整理的内核kernel以及根文件系统rootfs是如何映射到对应的nand flash的的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。