1 嵌入式系統啟動(dòng)流程
對于一個(gè)完整的嵌入式系統,它由U-boot、內核(Linux)、文件系統、應用程序四部分組成。那么這四部分之間的關(guān)系是怎么樣的呢?OpenWrt是屬于哪部分呢?
當我們拿到嵌入式設備,比如我們的MT7620開(kāi)發(fā)板,然后給它一上電,首先運行的就是我們的U-boot程序,然后就是U-boot來(lái)啟動(dòng)我們的內核(Linux),當內核(Linux)啟動(dòng)完成以后,內核(Linux)就會(huì )去掛載我們的文件系統,當文件系統掛載成功以后,就會(huì )在文件系統上面運行我們的應用程序,比如我們學(xué)習C語(yǔ)言時(shí)寫(xiě)的HelloWorld應用程序。
OpenWrt系統是一個(gè)嵌入式的Linux發(fā)行版。它本生是包含了內核(Linux)和文件系統兩部分的。因此,上一章中,我們編譯出來(lái)的固件
openwrt-ramips-mt7620-youku-yk1-squashfs-sysupgrade.bin
就是將內核(Linux)和文件系統打包成了一個(gè)bin文件。在這里,大家肯定會(huì )有疑問(wèn)了,那么U-boot是誰(shuí)提供的呢?對于其它的嵌入式設備,U-boot是需要我們單獨來(lái)編譯和燒寫(xiě)的,而對于我們的MT7620等開(kāi)發(fā)板,我們在出廠(chǎng)的時(shí)候,已經(jīng)在開(kāi)發(fā)板上的Flash中燒入了U-boot了。
那么大家馬上肯定會(huì )問(wèn),我們可以自己燒寫(xiě)U-boot嗎?答案是肯定的。我們可以自己燒寫(xiě)U-boot。如何燒寫(xiě),我們會(huì )在后面進(jìn)行講解。
注意:雖然我們可以自己燒寫(xiě)U-boot,但是,如果不是動(dòng)手能力特別強的同學(xué),不建議自己燒寫(xiě)U-boot,因為隨時(shí)都有可能變磚。變磚以后,就只能通過(guò)SPIFlash編程器來(lái)拯救了。雖然在后面的章節,會(huì )講如何使用SPIFlash編程器來(lái)燒U-boot、固件。但是整個(gè)過(guò)程比較麻煩,所以請大家自己慎重。
2 U-boot菜單選項簡(jiǎn)介
將開(kāi)發(fā)板的Mini-USB口通過(guò)USB線(xiàn)和電腦的USB口進(jìn)行連接,然后安裝串口驅動(dòng)(只有第一次需要安裝),USB轉串口驅動(dòng)文件如下,安裝步驟不再贅述。
圖1串口驅動(dòng)
圖2電腦識別到串口
打開(kāi)putty串口下載軟件,編者也給出了另一款下載軟件securecrt,看讀者喜好了。自己選擇吧。
緊接著(zhù),如圖3所示,在終端上設置好相應的串口(8N1,57600)。
圖3設置終端
最后上電啟動(dòng),便可以在串口上看到開(kāi)發(fā)板的啟動(dòng)信息,首先打印出的是U-boot的版本等信息,如圖4所示。
圖4 U-boot啟動(dòng)信息
緊接著(zhù)便進(jìn)入了U-boot的菜單選項,如圖5所示。這里一共有5秒的時(shí)間供大家選擇。如果不做任何選擇,5秒后,便自動(dòng)啟動(dòng)內核。
圖5U-boot的菜單選項
1).選擇1,表示將固件通過(guò)網(wǎng)絡(luò )下載到內存中,如果是刷SDK固件,可以選擇這個(gè)選項,但是,如果是刷OpenWrt,該選項沒(méi)有用,我們會(huì )發(fā)現,刷固件成功以后,系統并不能正常啟動(dòng);
2).選擇2,表示將固件通過(guò)網(wǎng)絡(luò )下載到Flash中,在以后的開(kāi)發(fā)中,我們都是使用該選項;
3).選擇3,表示啟動(dòng)內核(Linux),上面說(shuō)的5秒結束,不做任何選擇,系統就會(huì )默認來(lái)選擇該選項,然后啟動(dòng)系統;
4).選擇4,便會(huì )進(jìn)入到U-boot的命令行,注意區分Linux系統的命令行。在U-boot的命令行我們可以使用printenv、set、loadb等命令。
5).選擇7,表示將U-boot通過(guò)串口下載到Flash中;
6).選擇9,表示將U-boot通過(guò)網(wǎng)絡(luò )下載到Flash中。
3 燒寫(xiě)OpenWrt固件
以下燒寫(xiě)方法,都是通過(guò)網(wǎng)絡(luò )的方式進(jìn)行燒寫(xiě)。因此,需要用到網(wǎng)線(xiàn)。接線(xiàn)方式有兩種,一是通過(guò)網(wǎng)線(xiàn)將開(kāi)發(fā)板的網(wǎng)口和電腦的網(wǎng)口直接相連(電腦---開(kāi)發(fā)板);另一種是電腦和路由器通過(guò)網(wǎng)線(xiàn)或者wifi連接,然后開(kāi)發(fā)板和路由器通過(guò)網(wǎng)線(xiàn)連接(電腦---路由器---開(kāi)發(fā)板)。
為了更加方便和穩定,推薦使用第二種方法。
無(wú)論使用哪種方法,都必須遵循一個(gè)大前提,就是要讓電腦和開(kāi)發(fā)板的IP處于同一個(gè)網(wǎng)段。另外,一定要關(guān)閉電腦的防火墻和一些頑固的殺毒軟件。
3.1 通過(guò)網(wǎng)線(xiàn)下載
3.1.1設置ubuntu虛擬網(wǎng)卡
1 選擇網(wǎng)卡
編輯->虛擬網(wǎng)絡(luò )編輯器->橋接模式選擇本機的物理網(wǎng)卡,見(jiàn)下圖.
圖6
2 網(wǎng)絡(luò )適配器設置
虛擬機->設置->網(wǎng)絡(luò )適配器
圖7
3.1.2 主服務(wù)器tftp服務(wù)器配置
TFTP(Trivial File Transfer Protocol,簡(jiǎn)單文件傳輸協(xié)議)是TCP/IP協(xié)議族中的一個(gè)用來(lái)在客戶(hù)機與服務(wù)器之間進(jìn)行簡(jiǎn)單文件傳輸的協(xié)議,提供不復雜、開(kāi)銷(xiāo)不大的文件傳輸服務(wù)。TFTP承載在UDP上,提供不可靠的數據流傳輸服務(wù),不提供存取授權與認證機制,使用超時(shí)重傳方式來(lái)保證數據的到達。
0 IP配置
在談TFTP之前,先簡(jiǎn)單講一下Linux網(wǎng)絡(luò )配置,網(wǎng)絡(luò )中最重要的當然是IP地址了,這里不講IP協(xié)議,在后面的網(wǎng)絡(luò )編程再講解,這里主要學(xué)習一下Linux下配置IP,配置IP地址的方法有兩種:
- 配置靜態(tài)IP:在主機進(jìn)入網(wǎng)絡(luò )之前,事先未主機設置固定的IP地址;
- 配置動(dòng)態(tài)IP:選擇DHCP網(wǎng)絡(luò )服務(wù),在主機進(jìn)行網(wǎng)絡(luò )之后,動(dòng)態(tài)的隨機獲取IP地址;
當然,大家都知道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í),用于顯示當前主機中狀態(tài)為“活動(dòng)”的網(wǎng)絡(luò )接口信息;
當然,ifconfig命令可以修改IP地址:
sudo ifconfig eth0 192.168.3.51
但是這是動(dòng)態(tài)的修改IP地址,重啟以后,IP地址又變回原來(lái)的靜態(tài)IP地址;修改IP地址除了可以在圖形界面中修改,也可以在配置文件中修改,這才是Linux的特性!無(wú)論是配置靜態(tài)IP還是動(dòng)態(tài)IP,計算機系統將IP信息保存在什么地方呢?答案是配置文件 "/etc/network/interfaces".在UBuntu Linux 啟動(dòng)時(shí)就能獲得IP地址的配置信息。若是配置靜態(tài)IP。就從配置文件中讀取IP地址參數,直接配置網(wǎng)絡(luò )接口設備;若是配置動(dòng)態(tài)IP,就通知主機通過(guò)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
重啟下系統,用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)修改過(guò)的IP地址。
注意:
1、若不能訪(fǎng)問(wèn)外網(wǎng): ping 不通114.114.114.114
解決方法: sudo route add default gw 192.168.1.1
2、若不能訪(fǎng)問(wèn)域名: 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地址應該是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"
說(shuō)明:修改項,其中TFTP_DIRECTORY處可以改為你的tftp-server的根目錄,這里是/tftpboot,當然可以改成其他地址,參數 -c 指定了可以創(chuàng )建文件,參數 -s是指定tftpd-hpa服務(wù)目錄,上面已經(jīng)指定。
4 創(chuàng )建目錄tftpboot,改變權限及啟動(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 測試
a、登陸服務(wù)器
tftp localhost或 tftp<主機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
注意:必須是超級用戶(hù)權限
6問(wèn)題及原因(解決方法):
1、Transfer time out.
tftpd服務(wù)沒(méi)有啟動(dòng)
2、Error code 0:Permission denied
可能是由SELinux造成的,在FC3和FC3以后的FC版本中SELinux默認的都是開(kāi)啟的,現在要關(guān)掉它。
修改文件/etc/sysconfig/selinux,設定SELINUX=disabled,然后重啟電腦即可
或者執行命令system-config-securitylevel打開(kāi)“安全級別配置”對話(huà)框,將SELinux(S)選項中“強制”改為“允許”
3、Error code 1:File not found
指定的文件夾不存在;或tftpd啟動(dòng)參數中沒(méi)有指定-c選項,允許上傳文件
4、Error code 2:Only absolute filenames allowed
TFTP_OPTIONS="-l -c -s",中的選項注意一下,是否沒(méi) -c
5、Error code 2:Access violation
上傳的文件要有相應的可讀寫(xiě)(覆蓋)的權限才能上傳,要對文件的權限進(jìn)行修改
chmod 777 (文件名)
3.1.3 主機端NFS配置
NFS是Network File System的簡(jiǎn)寫(xiě),即網(wǎng)絡(luò )文件系統。
網(wǎng)絡(luò )文件系統是許多操作系統都支持的文件系統中的一種,也被成為NFS。NFS允許一個(gè)系統在網(wǎng)絡(luò )上與他人共享目錄和文件。通過(guò)使用NFS,用戶(hù)可以像訪(fǎng)問(wèn)本地文件一樣訪(fǎng)問(wèn)遠端系統上的文件。
NFS所提供的共享文件服務(wù)是建議在高度信任的基礎上的,所以,向其他用戶(hù)釋放共享資源之前,一定要確保對方的可靠性。
NFS的應用:在我們嵌入式開(kāi)發(fā)過(guò)程中,NFS是一個(gè)重要環(huán)節,我們常?!ぐ选案募毕到y放在主機上,然后在開(kāi)發(fā)板啟動(dòng)的時(shí)候通過(guò)NFS來(lái)掛載主機上的根文件系統。這樣省去了每次都要把文件系統燒寫(xiě)到存儲設備上的步驟,可以說(shuō)比tftp更方便。
下面我們將以Ubuntu為例,講解一下NFS的配置過(guò)程:
Server: PC
CLient : ARM(這里是用同一臺機器模擬的,主要是安裝過(guò)程)
1 檢查是否安裝nfs
命令:sudo dpkg -s install nfs-kernel-server
2 如果未安裝則需要安裝nfs-server
命令:sudo apt-get install nfs-kernel-server
3 修改配置文件及權限
命令:
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)
格式說(shuō)明:
共享目錄:主機名稱(chēng)
主機名稱(chēng)或共享IP:允許按照指定權限訪(fǎng)問(wèn)這個(gè)目錄的遠程主機(如:開(kāi)發(fā)板)
參數:
ro:只讀權限
rw:讀寫(xiě)權限
no_root_squash:如果是客戶(hù)端root,那么他對這個(gè)目錄具有root權限
root_squash:如果是客戶(hù)端root,那么他的權限被限制為匿名使用者
all_squash:如果是客戶(hù)端是什么身份,那么他的權限被限制為匿名使用者
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ù)當前狀態(tài)
showmount –e 192.168.3.51 //查看NFS服務(wù)器的共享資源
sudo mount –t nfs 192.168.3.51: /tftpboot/rootfs/mnt/nfs//掛載共享資源
-t 指類(lèi)型,這里是NFS;
192.168.3.51是服務(wù)端的IP地址;
/tftpboot/rootfs 是服務(wù)端的共享目錄;
/mnt/nfs是掛載點(diǎn),是客戶(hù)端的目錄;
當客戶(hù)端使用mount命令講NFS服務(wù)器上的到處文件系統掛載到本地后,接下來(lái)對掛載的文件系統的操作與使用本地文件系統沒(méi)有任何區別。
sudo umount/mnt/nfs//卸載共享資源
需要說(shuō)明的是,當有用戶(hù)正在使用某個(gè)已加載的共享目錄上的文件時(shí),則不能卸載該文件系統,如果用戶(hù)確認無(wú)誤,可以使用“umount -f”命令強行卸載共享的目錄。
6測試
第一種方法)showmount -e
第二種方法)自己掛載
$ mount -t nfs 127.0.0.1:/nfsboot /mnt/xxx
注意:必須是超級用戶(hù)權限
連接串口和板子,運行串口通信程序(putty在工具),設置相關(guān)參數。
圖8
圖9
然后開(kāi)發(fā)板上電,在如圖10所示的界面中,選擇2。
圖10
在圖10所示界面中,我們輸入y以確定我們是要燒寫(xiě)固件到Flash中。接著(zhù)便會(huì )進(jìn)入到如圖11所示界面。
圖11
1).如圖11所示的1中,輸入設備IP,這個(gè)IP可以是任意的,但是必須要和2中輸入的服務(wù)器IP是同一個(gè)網(wǎng)段;
2).如圖11所示的2中,輸入服務(wù)器IP;
3).如圖11所示的3中,輸入我們要下載的固件的名字。以上3點(diǎn)設置好以后,最后回車(chē),便開(kāi)始下載程序了。如圖12所示。
圖12下載過(guò)程
注意:
1).出現#####,表示下載正在下載,一切正常;出現TTTTT,則說(shuō)明我們哪里設置不對,需要從頭重新設置一下。
2).如圖12所示,當串口打印出raspi_erase信息的時(shí)候,表示正在擦除Flash中的數據,此時(shí)一定不要強行斷電和退出,否則開(kāi)發(fā)板就變磚了。
3.2 通過(guò)tftpd32軟件
Tftpd32軟件適用于32位系統和部分64位系統。首先啟動(dòng)軟件,Tftpd32的界面如下。
圖13 Tftpd32界面
①對應的CurrentDirectory用于選擇固件所在的目錄,通過(guò)Browse按鈕來(lái)進(jìn)行選擇設置。比如,我將固件放在了G:盤(pán)的tftpboot目錄,則需要進(jìn)行如圖2所示的設置。
②對應的Serverinterface用于選擇服務(wù)器的IP地址。此時(shí),如果你是通過(guò)網(wǎng)線(xiàn)和開(kāi)發(fā)板或者路由器進(jìn)行連接,那么這里就應該選擇為本地有線(xiàn)網(wǎng)卡的IP地址;如果是通過(guò)WiFi和路由器進(jìn)行連接,那么這里應該選擇為無(wú)線(xiàn)網(wǎng)卡的IP地址。
注意:電腦的IP地址通過(guò)在運行(win+R就可打開(kāi),方法很多)中CMD中輸入ipconfig命令得到,如圖14所示。
圖14查看電腦IP
當Tftpd32軟件設置完成以后,接下來(lái)就是將開(kāi)發(fā)板的Mini-USB口通過(guò)USB線(xiàn)和電腦的USB口進(jìn)行連接,然后安裝串口驅動(dòng)和設置好相應的串口(8N1,57600),然后開(kāi)發(fā)板上電,在如圖15所示的界面中,選擇2。
圖15
在圖15所示界面中,我們輸入y以確定我們是要燒寫(xiě)固件到Flash中。接著(zhù)便會(huì )進(jìn)入到如圖16所示界面。
圖16
1).如圖16所示的1中,輸入設備IP,這個(gè)IP可以是任意的,但是必須要和2中輸入的服務(wù)器IP是同一個(gè)網(wǎng)段;
2).如圖16所示的2中,輸入服務(wù)器IP;
3).如圖16所示的3中,輸入我們要下載的固件的名字。以上3點(diǎn)設置好以后,最后回車(chē),便開(kāi)始下載程序了。如圖17所示。
圖17下載過(guò)程
注意:
1).出現#####,表示下載正在下載,一切正常;出現TTTTT,則說(shuō)明我們哪里設置不對,需要從頭重新設置一下。
2).如圖17所示,當串口打印出raspi_erase信息的時(shí)候,表示正在擦除Flash中的數據,此時(shí)一定不要強行斷電和退出,否則開(kāi)發(fā)板就變磚了。
3.3 通過(guò)3CDaemon軟件
3CDaemon適用于64位系統。首先啟動(dòng)軟件,3CDaemon的界面如下。
圖18 CDaemon軟件界面
當我們啟動(dòng)好3CDaemon軟件以后,我們發(fā)現它監聽(tīng)了電腦上所有網(wǎng)卡的IP地址,這也是較Tftpd32軟件好的地方,不用我們自己選擇指定IP。但是,任然需要我們來(lái)設置固件所在目錄。點(diǎn)如圖18所示的,點(diǎn)擊“設置TFTP服務(wù)器”按鈕,會(huì )彈出如圖19所示的對話(huà)框。在該對話(huà)框中選中固件的存放目錄即可。
圖19設置固件的目錄
當3CDaemon軟件設置好以后,接下來(lái)的操作又和使用Tftpd32軟件的過(guò)程一樣了。開(kāi)發(fā)板上電,選2,輸入y,設置設備IP、服務(wù)器IP、固件的名字。
注意:對于不會(huì )從Ubuntu下載固件的朋友,編者也將固件放在附件里,直接使用就行了。但是想更好地掌握openwrt的朋友,還是要多學(xué)習啊。
審核編輯:湯梓紅
-
嵌入式系統
+關(guān)注
關(guān)注
40文章
3450瀏覽量
128459 -
內核
+關(guān)注
關(guān)注
3文章
1314瀏覽量
39932 -
Linux
+關(guān)注
關(guān)注
87文章
11026瀏覽量
207156 -
燒寫(xiě)
+關(guān)注
關(guān)注
0文章
55瀏覽量
14134 -
OpenWrt
+關(guān)注
關(guān)注
10文章
120瀏覽量
38989
發(fā)布評論請先 登錄
相關(guān)推薦
評論