uboot默認是支持執行應用程序的,就像引導內核一樣,我們也可以自己寫一個應用程序,讓uboot啟動時引導。
在uboot examples/standalone 目錄下,有hello_world.c文件,編譯uboot的時候,會自動編譯hello_world.bin文件。
裸機程序未加鏈接地址時,只能使用text代碼段,如果裸機程序中使用出現了跨端操作(使用text端段以外的段:rodata,data,bss段),必須在鏈接時手工指定連接鏈接地址為實際的運行地址。
默認的鏈接地址由 Makefile中通過CONFIG_STANDALONE_LOAD_ADDR
指定。
這個地址不一定適合我們的板子,為了不影響uboot的正常運行,我們修改該地址為內核的鏈接地址0x280000
。
重新編譯的uboot后,將hello_world.bin通過tftp加載到內存中。
uboot設置好參數。
=> setenv ipaddr 192.168.137.110
=> setenv serverip 192.168.137.1
=> setenv gatewayip 192.168.137.1
=> tftp 0x00280000 hello_world.bin
ethernet@fe300000 Waiting for PHY auto negotiation to complete.. done
Speed: 1000, full duplex
Using ethernet@fe300000 device
TFTP from server 192.168.137.1; our IP address is 192.168.137.110
Filename 'hello_world.bin'.
Load address: 0x280000
Loading: #
0 Bytes/s
done
Bytes transferred = 794 (31a hex)
執行go指令去引導我們的程序。
=> go 0x280000
## Starting application at 0x00280000 ...
Example expects ABI version 9
Actual U-Boot ABI version 9
Hello World
argc = 1
argv[0] = "0x280000"
argv[1] = ""
Hit any key to exit ...
成功打印出Hello World。
也可以將 go 0x280000
添加到bootcmd
中,每次啟動內核前,先去引導應用程序,再引導內核。
end
-
內核
+關注
關注
3文章
1372瀏覽量
40276 -
應用程序
+關注
關注
37文章
3265瀏覽量
57677 -
Uboot
+關注
關注
4文章
125瀏覽量
28214
發布評論請先 登錄
相關推薦
評論