我們移植好uboot和Linux內核之後,當我們重啓之後,開發板首先做的事情就是將nandflash前4K的內容複製到SRAM中去,由於SRAM只有4K大小,所以我們必須將初始化CPU、內存、中斷、關閉開門狗以及nandflash中uboot拷貝到SDRAM中的的程序都放在這前4K的位置中去。
而將程序編譯生成一個可執行文件的最後一個過程是鏈接,而鏈接生成的可執行文件又可以分成很多段。在GUN/GCC的工具鏈中,鏈接這個工作是鏈接器ld這個程序來完成的。而每個鏈接過程都由鏈接腳本(linker script,一般以lds作爲文件的後綴名)控制。對於.lds文件,它定義了整個程序編譯鏈接的過程,決定了一個可執行程序的各個段的存儲位置。而決定uboot的代碼的存儲的位置的是u-boot 鏈接文件arch/arm/cpu/arm920t/u-boot.lds
. = ALIGN(4);
.text :
{
arch/arm/cpu/arm920t/start.o (.text)
board/lingyun/fl2440/lowlevel_init.o (.text)
board/lingyun/fl2440/nand_read.o (.text)
*(.text)
}
我們可以看到文本段中的文件存儲的位置和順序,依次是start.o lowlevel_init.o nand_read.o
當我們啓動開發板後,可以看到secureCRT上的顯示內容
這個時候內核開始啓動了,這個內核是版本是linux3.0,根文件系統是initramfs。系統啓動之後首先要執行的是init這個進程,init進程會執行initab這個腳本下的命令,主要有
1.掛載nandflash分區:
null::wait:/bin/mount -osync,noatime,rw -t jffs2 /dev/mtdblock6 /apps
null::wait:/bin/mount -osync,noatime,rw -t jffs2 /dev/mtdblock7 /info
null::respawn:/sbin/getty -LttyS0 115200 vt100
for i in /etc/init.d/S??* ; do
$i
done
S01_network
S04_dropbear S99_rcsApp rcS
S01_network
配置網卡啓動的腳本
S04_dropbear
配置遠程登錄的腳本
S99_rcsApp
創建支持/apps/etc目錄下的啓動腳本,這個腳本的內容爲
#
if (test -d /apps/etc/init.d)
then
for i in /apps/etc/init.d/S??* ; do
$i
done
fi