當前位置:編程學習大全網 - 源碼下載 - uboot對內存初始化後內核需要再次初始化嗎

uboot對內存初始化後內核需要再次初始化嗎

系統啟動過程簡介初始化代碼讀取uboot到內存裏面,然後跳轉到uboot那裏去執行uboot,uboot初始化必要的硬件,加載壹些驅動,其中包括nandflash的驅動,然後根據uboot裏面設置的壹個啟動命令:nandread0x30007FC00x1000000x200000;bootm0x30007FC0意思就是,先去讀取nandflash,從0x100000開始,長度為0x200000的數據到memory的0x30007FC0處,然後bootm表示從memory的0x30007FC0開始運行。也就是去運行內核鏡像了。然後,內核會自己解壓縮,然後執行,初始化硬件,加載驅動模塊,最後去掛載rootfs,#defineCONFIG_BOOTARGS"root=/dev/mtdblock2rwinit=/linuxrcconsole=ttyS0,115200mem=16Mrootfstype=yafffs2"此文件系統,也是妳實現自己用相應的文件系統制作工具,制作的,然後燒寫到對應的位置的。上面中root=/dev/mtdblock2,表示,要去/dev/mtdblock2,也就是mtd的第3個分區,去加載。而這裏的mtd的第3個分區具體對應的nandflash中的的地址,是妳在內核中,壹般是在core.c自己定義的的nandflash的分區。壹般是uboot是第壹個分區,內核kernel是第二個,然後就是rootfs是第三個分區,也就是/dev/mtdblock2。例如分區:staticstructmtd_partitionrm9200_partitions[3]={{/*uboot256K*/.name="uboot",.size=0x40000,.offset=0},{/*kernel1.768M*/.name="kernel",.size=0x1C0000,.offset=0x40000},{/*rootfs2M*/.name="rootfs",.size=0x200000,.offset=0x200000},};如果按照上面分區,定義的/dev/mtdblock2的起始地址是0x200000,還算成大小是2M的位置,然後,內核啟動掛載rootfs的時候,就是,以上面從uboot傳過來的參數中yaffs2格式,到nandflash的2M的地址讀取並加載rootfs,加載完成後,這樣,裏面對應的根目錄,以及所有的文件,文件夾就都可以識別了。然後才會去讀取並運行初始化腳本相關的東西,最後初始化console控制臺,然後才能看到那個常見的#,才可以輸入命令,比如ls,才可以和系統交互。所以,實際就是這個rootfs,對應著mtdblock2,對應的某個nandflash上的地址,比如此處的2M的地方。而不是內核kernel這個文件映射的。

  • 上一篇:有用電銷系統的嗎?求用過的推薦壹款靠譜電銷系統。
  • 下一篇:Window下GTK+能不能靜態編譯進程序
  • copyright 2024編程學習大全網