嵌入式開(kāi)發(fā)通常使用主機(jī)-開(kāi)發(fā)板的開(kāi)發(fā)模式,在裸板開(kāi)發(fā)中,我們通常使用串口調(diào)試工具傳遞文件,比如windows平臺(tái)的超級(jí)終端,SecuCRT以及Linux平臺(tái)的ckermit(題外話:ckermit比windows的那兩個(gè)快多了)。但在OS的開(kāi)發(fā)環(huán)境中,由于程序復(fù)雜,規(guī)模巨大,串口的低速和易錯(cuò)就不再適合我們開(kāi)發(fā)了,而在這種環(huán)境下,基于網(wǎng)絡(luò)的開(kāi)發(fā)環(huán)境由于高速和準(zhǔn)確受到了大家的青睞。
結(jié)構(gòu)說(shuō)明
在有OS的嵌入式系統(tǒng)中,SoC的啟動(dòng)過(guò)程有3個(gè)加載。
- 上電的第一個(gè)程序就是片上固化的啟動(dòng)代碼,它負(fù)責(zé)把bootloader從Flash中加載到內(nèi)存中并執(zhí)行
- bootloader會(huì)從Flash中加載Linux內(nèi)核以及設(shè)備樹(shù)文件到內(nèi)存,并對(duì)兩者進(jìn)行相關(guān)的配置。完成所有工作后跳轉(zhuǎn)到內(nèi)核的首地址
- 內(nèi)核接管bootloader配置好的硬件資源,內(nèi)核啟動(dòng)過(guò)程中非常重要的一件事就是掛載文件系統(tǒng)。
在開(kāi)發(fā)過(guò)程中,由于bootloader通常都具有網(wǎng)絡(luò)功能,而linux內(nèi)核,設(shè)備樹(shù)dts和文件系統(tǒng)fs都是不斷迭代的,所以我們自然希望通過(guò)配置bootloader的網(wǎng)絡(luò)功能使其直接通過(guò)服務(wù)器(開(kāi)發(fā)主機(jī))下載內(nèi)核并進(jìn)一步下載設(shè)備樹(shù)文件(tftp),甚至直接掛接網(wǎng)絡(luò)上的文件系統(tǒng)(nfs)。整個(gè)開(kāi)發(fā)環(huán)境的結(jié)構(gòu)框圖如下:
tftp的安裝和配置
tftp即tiny ftp,是一種輕型的ftp協(xié)議,ubuntu下可以使用下面這個(gè)小腳本安裝并配置。
#!/bin/bash echo "Please input tftpdir" read tftpdir
sudo mkdir $tftpdir #創(chuàng)建用于傳輸文件的目錄 sudo chmod 0777 $tftpdir sudo apt-get install tftp-hpa tftpd-hpa xinetd -y #sudo vi /etc/default/tftp-hpa sudo touch /etc/default/tftpd-hpa
sudo chmod 0777 /etc/default/tftpd-hpa
sudo echo "TFTP_USERNAME=\"tftp\"" > /etc/default/tftpd-hpa
sudo echo "TFTP_DIRECTORY=\"$tftpdir\"" >> /etc/default/tftpd-hpa #tftpd-hpa的服務(wù)目錄,這個(gè)想建立在哪里都行 sudo echo "TFTP_ADDRESS=\"0.0.0.0:69\"" >> /etc/default/tftpd-hpa