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