1 嵌入式系統(tǒng)啟動(dòng)流程
對(duì)于一個(gè)完整的嵌入式系統(tǒng),它由U-boot、內(nèi)核(Linux)、文件系統(tǒng)、應(yīng)用程序四部分組成。那么這四部分之間的關(guān)系是怎么樣的呢?OpenWrt是屬于哪部分呢?
當(dāng)我們拿到嵌入式設(shè)備,比如我們的MT7620開發(fā)板,然后給它一上電,首先運(yùn)行的就是我們的U-boot程序,然后就是U-boot來啟動(dòng)我們的內(nèi)核(Linux),當(dāng)內(nèi)核(Linux)啟動(dòng)完成以后,內(nèi)核(Linux)就會(huì)去掛載我們的文件系統(tǒng),當(dāng)文件系統(tǒng)掛載成功以后,就會(huì)在文件系統(tǒng)上面運(yùn)行我們的應(yīng)用程序,比如我們學(xué)習(xí)C語言時(shí)寫的HelloWorld應(yīng)用程序。
OpenWrt系統(tǒng)是一個(gè)嵌入式的Linux發(fā)行版。它本生是包含了內(nèi)核(Linux)和文件系統(tǒng)兩部分的。因此,上一章中,我們編譯出來的固件
openwrt-ramips-mt7620-youku-yk1-squashfs-sysupgrade.bin
就是將內(nèi)核(Linux)和文件系統(tǒng)打包成了一個(gè)bin文件。在這里,大家肯定會(huì)有疑問了,那么U-boot是誰提供的呢?對(duì)于其它的嵌入式設(shè)備,U-boot是需要我們單獨(dú)來編譯和燒寫的,而對(duì)于我們的MT7620等開發(fā)板,我們?cè)诔鰪S的時(shí)候,已經(jīng)在開發(fā)板上的Flash中燒入了U-boot了。
那么大家馬上肯定會(huì)問,我們可以自己燒寫U-boot嗎?答案是肯定的。我們可以自己燒寫U-boot。如何燒寫,我們會(huì)在后面進(jìn)行講解。
注意:雖然我們可以自己燒寫U-boot,但是,如果不是動(dòng)手能力特別強(qiáng)的同學(xué),不建議自己燒寫U-boot,因?yàn)殡S時(shí)都有可能變磚。變磚以后,就只能通過SPIFlash編程器來拯救了。雖然在后面的章節(jié),會(huì)講如何使用SPIFlash編程器來燒U-boot、固件。但是整個(gè)過程比較麻煩,所以請(qǐng)大家自己慎重。
2 U-boot菜單選項(xiàng)簡介
將開發(fā)板的Mini-USB口通過USB線和電腦的USB口進(jìn)行連接,然后安裝串口驅(qū)動(dòng)(只有第一次需要安裝),USB轉(zhuǎn)串口驅(qū)動(dòng)文件如下,安裝步驟不再贅述。
圖1串口驅(qū)動(dòng)
圖2電腦識(shí)別到串口
打開putty串口下載軟件,編者也給出了另一款下載軟件securecrt,看讀者喜好了。自己選擇吧。
緊接著,如圖3所示,在終端上設(shè)置好相應(yīng)的串口(8N1,57600)。
圖3設(shè)置終端
最后上電啟動(dòng),便可以在串口上看到開發(fā)板的啟動(dòng)信息,首先打印出的是U-boot的版本等信息,如圖4所示。
圖4 U-boot啟動(dòng)信息
緊接著便進(jìn)入了U-boot的菜單選項(xiàng),如圖5所示。這里一共有5秒的時(shí)間供大家選擇。如果不做任何選擇,5秒后,便自動(dòng)啟動(dòng)內(nèi)核。
圖5U-boot的菜單選項(xiàng)
1).選擇1,表示將固件通過網(wǎng)絡(luò)下載到內(nèi)存中,如果是刷SDK固件,可以選擇這個(gè)選項(xiàng),但是,如果是刷OpenWrt,該選項(xiàng)沒有用,我們會(huì)發(fā)現(xiàn),刷固件成功以后,系統(tǒng)并不能正常啟動(dòng);
2).選擇2,表示將固件通過網(wǎng)絡(luò)下載到Flash中,在以后的開發(fā)中,我們都是使用該選項(xiàng);
3).選擇3,表示啟動(dòng)內(nèi)核(Linux),上面說的5秒結(jié)束,不做任何選擇,系統(tǒng)就會(huì)默認(rèn)來選擇該選項(xiàng),然后啟動(dòng)系統(tǒng);
4).選擇4,便會(huì)進(jìn)入到U-boot的命令行,注意區(qū)分Linux系統(tǒng)的命令行。在U-boot的命令行我們可以使用printenv、set、loadb等命令。
5).選擇7,表示將U-boot通過串口下載到Flash中;
6).選擇9,表示將U-boot通過網(wǎng)絡(luò)下載到Flash中。
3 燒寫OpenWrt固件
以下燒寫方法,都是通過網(wǎng)絡(luò)的方式進(jìn)行燒寫。因此,需要用到網(wǎng)線。接線方式有兩種,一是通過網(wǎng)線將開發(fā)板的網(wǎng)口和電腦的網(wǎng)口直接相連(電腦---開發(fā)板);另一種是電腦和路由器通過網(wǎng)線或者wifi連接,然后開發(fā)板和路由器通過網(wǎng)線連接(電腦---路由器---開發(fā)板)。
為了更加方便和穩(wěn)定,推薦使用第二種方法。
無論使用哪種方法,都必須遵循一個(gè)大前提,就是要讓電腦和開發(fā)板的IP處于同一個(gè)網(wǎng)段。另外,一定要關(guān)閉電腦的防火墻和一些頑固的殺毒軟件。
3.1 通過網(wǎng)線下載
3.1.1設(shè)置ubuntu虛擬網(wǎng)卡
1 選擇網(wǎng)卡
編輯->虛擬網(wǎng)絡(luò)編輯器->橋接模式選擇本機(jī)的物理網(wǎng)卡,見下圖.
圖6
2 網(wǎng)絡(luò)適配器設(shè)置
虛擬機(jī)->設(shè)置->網(wǎng)絡(luò)適配器
圖7
3.1.2 主服務(wù)器tftp服務(wù)器配置
TFTP(Trivial File Transfer Protocol,簡單文件傳輸協(xié)議)是TCP/IP協(xié)議族中的一個(gè)用來在客戶機(jī)與服務(wù)器之間進(jìn)行簡單文件傳輸?shù)膮f(xié)議,提供不復(fù)雜、開銷不大的文件傳輸服務(wù)。TFTP承載在UDP上,提供不可靠的數(shù)據(jù)流傳輸服務(wù),不提供存取授權(quán)與認(rèn)證機(jī)制,使用超時(shí)重傳方式來保證數(shù)據(jù)的到達(dá)。
0 IP配置
在談TFTP之前,先簡單講一下Linux網(wǎng)絡(luò)配置,網(wǎng)絡(luò)中最重要的當(dāng)然是IP地址了,這里不講IP協(xié)議,在后面的網(wǎng)絡(luò)編程再講解,這里主要學(xué)習(xí)一下Linux下配置IP,配置IP地址的方法有兩種:
- 配置靜態(tài)IP:在主機(jī)進(jìn)入網(wǎng)絡(luò)之前,事先未主機(jī)設(shè)置固定的IP地址;
- 配置動(dòng)態(tài)IP:選擇DHCP網(wǎng)絡(luò)服務(wù),在主機(jī)進(jìn)行網(wǎng)絡(luò)之后,動(dòng)態(tài)的隨機(jī)獲取IP地址;
當(dāng)然,大家都知道ifconfig這個(gè)命令:
ifconfig
eth0 Link encap:Ethernet HWaddr 00:0c:29:6c:c2:ec
inet addr:172.16.58.130 Bcast:172.16.58.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe6c:c2ec/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:337 errors:0 dropped:0 overruns:0 frame:0
TX packets:358 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:123712 (123.7 KB) TX bytes:42430 (42.4 KB)
Interrupt:19 Base address:0x2024
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:149 errors:0 dropped:0 overruns:0 frame:0
TX packets:149 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:10307 (10.3 KB) TX bytes:10307 (10.3 KB)
如果ifconfig命令不帶任何參數(shù)時(shí),用于顯示當(dāng)前主機(jī)中狀態(tài)為“活動(dòng)”的網(wǎng)絡(luò)接口信息;
當(dāng)然,ifconfig命令可以修改IP地址:
sudo ifconfig eth0 192.168.3.51
但是這是動(dòng)態(tài)的修改IP地址,重啟以后,IP地址又變回原來的靜態(tài)IP地址;修改IP地址除了可以在圖形界面中修改,也可以在配置文件中修改,這才是Linux的特性!無論是配置靜態(tài)IP還是動(dòng)態(tài)IP,計(jì)算機(jī)系統(tǒng)將IP信息保存在什么地方呢?答案是配置文件 "/etc/network/interfaces".在UBuntu Linux 啟動(dòng)時(shí)就能獲得IP地址的配置信息。若是配置靜態(tài)IP。就從配置文件中讀取IP地址參數(shù),直接配置網(wǎng)絡(luò)接口設(shè)備;若是配置動(dòng)態(tài)IP,就通知主機(jī)通過DHCP協(xié)議獲取網(wǎng)絡(luò)配置。以下分別為配置靜態(tài)IP和動(dòng)態(tài)IP時(shí),配置文件"/etc/network/interfaces"的實(shí)例:
動(dòng)態(tài)IP
cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
靜態(tài)IP
cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.3.51
netmask 255.255.0.0
gateway 192.168.1.1
重啟下系統(tǒng),用ifconfig命令查看IP地址
ifconfig
eth0 Link encap:Ethernet HWaddr 00:0c:29:6c:c2:ec
inet addr:192.168.3.51 Bcast:192.168.255.255 Mask:255.255.0.0
明顯看到IP地址依然是我們靜態(tài)修改過的IP地址。
注意:
1、若不能訪問外網(wǎng): ping 不通114.114.114.114
解決方法: sudo route add default gw 192.168.1.1
2、若不能訪問域名: ping 不通baidu.com
解決方法:
1)-- sudo vi /etc/resolv.conf
2) -- 添加nameserver 114.114.114.114
1 檢查是否安裝tftp server
命令:dpkg –s tftpd-hpa
2 如果未安裝則需要安裝tftp-server
命令:sudo apt-get install tftp-hpa tftpd-hpa
Client:PC 安裝tftp-hpa
Server:ARM 安裝tftpd-hpa
后面的 tftp 此處的IP地址應(yīng)該是ARM的IP地址。
__3 修改文件 tftpd-hpa __
命令:sudo vim /etc/default/tftpd-hpa
tftpd-hpa文件修改后如下:
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
說明:修改項(xiàng),其中TFTP_DIRECTORY處可以改為你的tftp-server的根目錄,這里是/tftpboot,當(dāng)然可以改成其他地址,參數(shù) -c 指定了可以創(chuàng)建文件,參數(shù) -s是指定tftpd-hpa服務(wù)目錄,上面已經(jīng)指定。
4 創(chuàng)建目錄tftpboot,改變權(quán)限及啟動(dòng)
命令:
sudo mkdir /tftpboot
sudo chmod a+w /tftpboot
操作命令:
sudo service tftpd-hpa stop//停止
sudo service tftpd-hpa start//啟動(dòng)
sudo service tftpd-hpa status//查看tftp信息
sudo service tftpd-hpa restart//重啟
5 測(cè)試
a、登陸服務(wù)器
tftp localhost或 tftp<主機(jī)IP>
b、從tftp服務(wù)器下載文件
tftp> get
c、上傳文件到tftp服務(wù)器
tftp> put
d、查看幫助
tftp>?
tftp-hpa5.2
Commands may be abbreviated. Commands are:
connect connect to remote tftp
mode set file transfer mode
put send file
get receive file
quit exit tftp
verbose toggle verbose mode
trace toggle packet tracing
literal toggle literal mode, ignore':'in file name
status show current status
binary set mode to octet
ascii set mode to netascii
rexmt set per-packet transmission timeout
timeout set total retransmission timeout
?print help information
help print help information
e、退出登陸
tftp> q
注意:必須是超級(jí)用戶權(quán)限
6問題及原因(解決方法):
1、Transfer time out.
tftpd服務(wù)沒有啟動(dòng)
2、Error code 0:Permission denied
可能是由SELinux造成的,在FC3和FC3以后的FC版本中SELinux默認(rèn)的都是開啟的,現(xiàn)在要關(guān)掉它。
修改文件/etc/sysconfig/selinux,設(shè)定SELINUX=disabled,然后重啟電腦即可
或者執(zhí)行命令system-config-securitylevel打開“安全級(jí)別配置”對(duì)話框,將SELinux(S)選項(xiàng)中“強(qiáng)制”改為“允許”
3、Error code 1:File not found
指定的文件夾不存在;或tftpd啟動(dòng)參數(shù)中沒有指定-c選項(xiàng),允許上傳文件
4、Error code 2:Only absolute filenames allowed
TFTP_OPTIONS="-l -c -s",中的選項(xiàng)注意一下,是否沒 -c
5、Error code 2:Access violation
上傳的文件要有相應(yīng)的可讀寫(覆蓋)的權(quán)限才能上傳,要對(duì)文件的權(quán)限進(jìn)行修改
chmod 777 (文件名)
3.1.3 主機(jī)端NFS配置
NFS是Network File System的簡寫,即網(wǎng)絡(luò)文件系統(tǒng)。
網(wǎng)絡(luò)文件系統(tǒng)是許多操作系統(tǒng)都支持的文件系統(tǒng)中的一種,也被成為NFS。NFS允許一個(gè)系統(tǒng)在網(wǎng)絡(luò)上與他人共享目錄和文件。通過使用NFS,用戶可以像訪問本地文件一樣訪問遠(yuǎn)端系統(tǒng)上的文件。
NFS所提供的共享文件服務(wù)是建議在高度信任的基礎(chǔ)上的,所以,向其他用戶釋放共享資源之前,一定要確保對(duì)方的可靠性。
NFS的應(yīng)用:在我們嵌入式開發(fā)過程中,NFS是一個(gè)重要環(huán)節(jié),我們常常·把“根文件”系統(tǒng)放在主機(jī)上,然后在開發(fā)板啟動(dòng)的時(shí)候通過NFS來掛載主機(jī)上的根文件系統(tǒng)。這樣省去了每次都要把文件系統(tǒng)燒寫到存儲(chǔ)設(shè)備上的步驟,可以說比tftp更方便。
下面我們將以Ubuntu為例,講解一下NFS的配置過程:
Server: PC
CLient : ARM(這里是用同一臺(tái)機(jī)器模擬的,主要是安裝過程)
1 檢查是否安裝nfs
命令:sudo dpkg -s install nfs-kernel-server
2 如果未安裝則需要安裝nfs-server
命令:sudo apt-get install nfs-kernel-server
3 修改配置文件及權(quán)限
命令:
sudo vim /etc/exports
sudo chmod 777 /tftpboot/rootfs
修改后的文件:
# /etc/exports: the access control list for filesystems which may be exported
# to NFS clients. See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4 gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes gss/krb5i(rw,sync,no_subtree_check)
#/tftpboot/rootfs *(rw,sync,no_root_squash,no_subtree_check)
格式說明:
共享目錄:主機(jī)名稱
主機(jī)名稱或共享IP:允許按照指定權(quán)限訪問這個(gè)目錄的遠(yuǎn)程主機(jī)(如:開發(fā)板)
參數(shù):
ro:只讀權(quán)限
rw:讀寫權(quán)限
no_root_squash:如果是客戶端root,那么他對(duì)這個(gè)目錄具有root權(quán)限
root_squash:如果是客戶端root,那么他的權(quán)限被限制為匿名使用者
all_squash:如果是客戶端是什么身份,那么他的權(quán)限被限制為匿名使用者
4手動(dòng)啟停NFS服務(wù)
命令:
sudo/etc/init.d/nfs-kernel-server start
sudo /etc/init.d/nfs-kernel-server restart
sudo/etc/init.d/nfs-kernel-server stop
sudo/etc/init.d/nfs-kernel-server restart//重新啟動(dòng)
5 共享操作
sudo/etc/init.d/nfs-kernel-server status//查看NFS服務(wù)當(dāng)前狀態(tài)
showmount –e 192.168.3.51 //查看NFS服務(wù)器的共享資源
sudo mount –t nfs 192.168.3.51: /tftpboot/rootfs/mnt/nfs//掛載共享資源
-t 指類型,這里是NFS;
192.168.3.51是服務(wù)端的IP地址;
/tftpboot/rootfs 是服務(wù)端的共享目錄;
/mnt/nfs是掛載點(diǎn),是客戶端的目錄;
當(dāng)客戶端使用mount命令講NFS服務(wù)器上的到處文件系統(tǒng)掛載到本地后,接下來對(duì)掛載的文件系統(tǒng)的操作與使用本地文件系統(tǒng)沒有任何區(qū)別。
sudo umount/mnt/nfs//卸載共享資源
需要說明的是,當(dāng)有用戶正在使用某個(gè)已加載的共享目錄上的文件時(shí),則不能卸載該文件系統(tǒng),如果用戶確認(rèn)無誤,可以使用“umount -f”命令強(qiáng)行卸載共享的目錄。
6測(cè)試
第一種方法)showmount -e
第二種方法)自己掛載
$ mount -t nfs 127.0.0.1:/nfsboot /mnt/xxx
注意:必須是超級(jí)用戶權(quán)限
連接串口和板子,運(yùn)行串口通信程序(putty在工具),設(shè)置相關(guān)參數(shù)。
圖8
圖9
然后開發(fā)板上電,在如圖10所示的界面中,選擇2。
圖10
在圖10所示界面中,我們輸入y以確定我們是要燒寫固件到Flash中。接著便會(huì)進(jìn)入到如圖11所示界面。
圖11
1).如圖11所示的1中,輸入設(shè)備IP,這個(gè)IP可以是任意的,但是必須要和2中輸入的服務(wù)器IP是同一個(gè)網(wǎng)段;
2).如圖11所示的2中,輸入服務(wù)器IP;
3).如圖11所示的3中,輸入我們要下載的固件的名字。以上3點(diǎn)設(shè)置好以后,最后回車,便開始下載程序了。如圖12所示。
圖12下載過程
注意:
1).出現(xiàn)#####,表示下載正在下載,一切正常;出現(xiàn)TTTTT,則說明我們哪里設(shè)置不對(duì),需要從頭重新設(shè)置一下。
2).如圖12所示,當(dāng)串口打印出raspi_erase信息的時(shí)候,表示正在擦除Flash中的數(shù)據(jù),此時(shí)一定不要強(qiáng)行斷電和退出,否則開發(fā)板就變磚了。
3.2 通過tftpd32軟件
Tftpd32軟件適用于32位系統(tǒng)和部分64位系統(tǒng)。首先啟動(dòng)軟件,Tftpd32的界面如下。
圖13 Tftpd32界面
①對(duì)應(yīng)的CurrentDirectory用于選擇固件所在的目錄,通過Browse按鈕來進(jìn)行選擇設(shè)置。比如,我將固件放在了G:盤的tftpboot目錄,則需要進(jìn)行如圖2所示的設(shè)置。
②對(duì)應(yīng)的Serverinterface用于選擇服務(wù)器的IP地址。此時(shí),如果你是通過網(wǎng)線和開發(fā)板或者路由器進(jìn)行連接,那么這里就應(yīng)該選擇為本地有線網(wǎng)卡的IP地址;如果是通過WiFi和路由器進(jìn)行連接,那么這里應(yīng)該選擇為無線網(wǎng)卡的IP地址。
注意:電腦的IP地址通過在運(yùn)行(win+R就可打開,方法很多)中CMD中輸入ipconfig命令得到,如圖14所示。
圖14查看電腦IP
當(dāng)Tftpd32軟件設(shè)置完成以后,接下來就是將開發(fā)板的Mini-USB口通過USB線和電腦的USB口進(jìn)行連接,然后安裝串口驅(qū)動(dòng)和設(shè)置好相應(yīng)的串口(8N1,57600),然后開發(fā)板上電,在如圖15所示的界面中,選擇2。
圖15
在圖15所示界面中,我們輸入y以確定我們是要燒寫固件到Flash中。接著便會(huì)進(jìn)入到如圖16所示界面。
圖16
1).如圖16所示的1中,輸入設(shè)備IP,這個(gè)IP可以是任意的,但是必須要和2中輸入的服務(wù)器IP是同一個(gè)網(wǎng)段;
2).如圖16所示的2中,輸入服務(wù)器IP;
3).如圖16所示的3中,輸入我們要下載的固件的名字。以上3點(diǎn)設(shè)置好以后,最后回車,便開始下載程序了。如圖17所示。
圖17下載過程
注意:
1).出現(xiàn)#####,表示下載正在下載,一切正常;出現(xiàn)TTTTT,則說明我們哪里設(shè)置不對(duì),需要從頭重新設(shè)置一下。
2).如圖17所示,當(dāng)串口打印出raspi_erase信息的時(shí)候,表示正在擦除Flash中的數(shù)據(jù),此時(shí)一定不要強(qiáng)行斷電和退出,否則開發(fā)板就變磚了。
3.3 通過3CDaemon軟件
3CDaemon適用于64位系統(tǒng)。首先啟動(dòng)軟件,3CDaemon的界面如下。
圖18 CDaemon軟件界面
當(dāng)我們啟動(dòng)好3CDaemon軟件以后,我們發(fā)現(xiàn)它監(jiān)聽了電腦上所有網(wǎng)卡的IP地址,這也是較Tftpd32軟件好的地方,不用我們自己選擇指定IP。但是,任然需要我們來設(shè)置固件所在目錄。點(diǎn)如圖18所示的,點(diǎn)擊“設(shè)置TFTP服務(wù)器”按鈕,會(huì)彈出如圖19所示的對(duì)話框。在該對(duì)話框中選中固件的存放目錄即可。
圖19設(shè)置固件的目錄
當(dāng)3CDaemon軟件設(shè)置好以后,接下來的操作又和使用Tftpd32軟件的過程一樣了。開發(fā)板上電,選2,輸入y,設(shè)置設(shè)備IP、服務(wù)器IP、固件的名字。
注意:對(duì)于不會(huì)從Ubuntu下載固件的朋友,編者也將固件放在附件里,直接使用就行了。但是想更好地掌握openwrt的朋友,還是要多學(xué)習(xí)啊。
審核編輯:湯梓紅
-
嵌入式系統(tǒng)
+關(guān)注
關(guān)注
41文章
3587瀏覽量
129432 -
內(nèi)核
+關(guān)注
關(guān)注
3文章
1372瀏覽量
40275 -
Linux
+關(guān)注
關(guān)注
87文章
11292瀏覽量
209317 -
燒寫
+關(guān)注
關(guān)注
0文章
57瀏覽量
14275 -
OpenWrt
+關(guān)注
關(guān)注
10文章
130瀏覽量
39296
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論