Architecture number in bootloader and Linux kernel
Bootloader 與 Linux kernel 的 architecture number 比對失敗:
嵌入式系統一開機會由 CPU 讀取某固定位置的指令,而這個位置存放的即為 bootloader 的程式碼,當 bootloader 完成系統初始化而將控制權交給 Linux kernel 的同時,會將該平台的 architecture number 暫存在 CPU register r1,由 Linux kernel 讀取 CPU register r1 並與 Linux kernel 的 architecture number 進行比對,若是相同則繼續進行開機程序,若是不同則會在 Uncompressing Linux kernel 之後停住。
若是希望得到更多的除錯資訊,可以透過 make menuconfig 指令開啟 Linux kernel config 的 CONFIG_DEBUG_LL 選項:
因為 bootloader 與 Linux kernel 的 architecture number 不同,在開啟 Linux kernel config 中的 CONFIG_DEBUG_LL 後所顯示的除錯訊息,0x3eb 為 bootloader 記載的 architecture number ,而 0x2d9 為 Linux kernel 記載的 architecture number 。 Bootloader 存放 architecture number 的相關程式碼隨著 bootloader 不同而有所差異。 Linux kernel 會將 architecture number 存放在 arch/arm/tools/mach-types,bootloader 與 Linux kernel 的 architecture number 必須相同,否則無法順利開機,若是因為 architecture number 相異而無法開機,可以嘗試修改其中一方使其相同。
因為 bootloader 與 Linux kernel 的 architecture number 不同,在開啟 Linux kernel config 中的 CONFIG_DEBUG_LL 後所顯示的除錯訊息:
發表迴響