上節完成了平臺端的環境搭建,我們的開發板端也要安裝相應的服務。
一.首先說一下我們開發板的啓動流程:
bootloader 初始化硬件,然後加載內核 kernel 然後掛接根文件系統,然後啓動我們的應用程序。
二.
當然第一步是要下載我們的bootloader,可以使用j-link等進行燒寫(不同板卡燒寫方式不同),一般我們使用SD卡的方式進行燒寫,SD卡需要製作成啓動卡,製作方法可以百度。將我們的bootloader放入SD卡中,
關閉開發板電源,將撥碼開關SW1調至(1000)(SD啓動模式)
剛纔做好的SD啓動盤插入SD卡插槽
打開電源
然後燒到我們的flash中,之後就可以通過bootloader來進行更多的操作。
(u-boot的移植適配板卡後期詳細說明)
boot燒寫完成後,之後就可以從flash啓動boot。撥號開關SW1 爲0110 (從EMMC(FLASH的一種) 啓動)
這個時候就可以通過串口查看到顯示信息了。
如果沒有打印信息,需要檢查以下幾個方面:
1. 連接串口線到板子的COM2口 //如果是用筆記本電腦的,需裝usb轉串口驅動(用360驅動大師在線裝方便)
2. 確認撥號開關SW1 爲0110 (從EMMC(FLASH的一種) 啓動)
3. 檢查 波特率設置, 流控設置
4. 可能爲flash中u-boot被破壞了,切換到SD卡啓動,重新燒寫boot(SW1 改爲1000)
三.配置網絡實現三板互通。
https://blog.csdn.net/thisway_diy/article/details/77976776 可以參考韋東山老師的教程。
其實也是比較簡單的,
------------------------
|板子 192.168.2.99 |
------------------------
------------------------
|電腦 192.168.2.100 255.255.255.0 192.168.2.1 | //做中轉用,和板子虛擬機IP要在同一網段, 且不能和它們IP一樣
------------------------
------------------------
|虛擬機 192.168.2.129 |
此時我們通過電腦ping 虛擬機時ping的通的,但是虛擬機ping電腦是ping不通的。
這裏注意我們要關閉我們電腦的殺毒軟件,並且關閉防火牆。
windows 防火牆 à 高級設置 à 入站規則,啓動文件和打印機共享(ICMPv4-in 專用公用)
此時就可以ping通了。
電腦和虛擬機的IP設置完了,接着要設置板卡的IP了。
啓動板子,快速按任意鍵停在boot處,設置u-boot 的環境變量
# setenv serverip 192.168.2.129 //注意它與虛擬機裏 ubuntu 的ip要一致
# setenv ipaddr 192.168.2.99
# setenv gatewayip 192.168.2.1
# saveenv 保存設置
# pri /*查看設置後效果
# ping 192.168.2.129 //測試網絡是否連通 ,注意在u-boot中, 它能ping電腦, 電腦不能ping它 //注意,要拔掉jtag線,否則ping 會重啓
host 192.168.2.129 is alive //is alive 表示ok
四.查看boot的指令
通過help我們可以看到支持很多的命令,也可以更具需要進行添加。
1.使用tftp服務,實現內核的加載
tftp使用時,服務器ip要設置我們電腦的IP。
# setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;bootm 41000000 - 42000000 /* 設置tftp方式加載內核
setenv bootcmd 設置環境變量(自啓動命令 bootcmd)
tftp 41000000 uImage\; 通過tftp從虛擬機/tftpboot目錄下下載內核uImage到板子 的內存 41000000 處。\; 用於分割多個命令
tftp 42000000 exynos4412-fs4412.dtb 通過tftp下載設備樹文件 exynos4412-fs4412.dtb 到板子的內存 42000000 處
bootm 41000000 - 42000000 啓動內核(41000000處放的是內核uImage, 42000000處放的是設備樹文件)
2.使用nfs服務,NFS根文件系統的掛載
首先啓動虛擬機服務端的nfs服務。
虛擬機端cat /etc/exports 來查看路徑。
#setenv bootargs root=/dev/nfs nfsroot=192.168.2.129:/nfs/rootfs rw console=ttySAC2,115200 init=/linuxrc ip=192.168.2.99 /* 掛載nfs rootfs
setenv bootarg 設置環境變量( bootarg是啓動參數)
root=/dev/nfs 指定根文件系統類型是 nfs
nfsroot=192.168.2.129:/nfs/rootfs 指定source rootfs的位置(是在ip 是192.168.9.120的機器上 ,的/source/rootfs目錄下). 注意/nfs/rootfs必須和前面NFS服務配置文件設置一致
# savenenv //保存環境變量
但是還是掛接不上,但是內核已經啓動起來了。
參數正確,網絡沒問題,nfs虛擬機掛接沒有問題,但是還是不行。
加載文件系統失敗,具體原因應該是內核權限配置問題,在之後的內核編譯中在詳細進行問題查找。先更換內核繼續進行。
五.練習
完成了環境的搭建。在電腦裏寫一個應用程序如hello.c ,裏面就簡單的輸出你的創客註冊的名字。 通過NFS的同步, 在板子上能運行該程序,輸出你的名字?
1. 掛接上虛擬機的nfs文件系統,後將編譯好的程序直接放到虛擬機目錄下,開發板就能直接查看,然後直接運行即可,注意程序要使用arm-gcc 工具鏈進行編譯。
arm-cortex_a8-linux-gnueabi-gcc hello.c -o hello
cp hello /home/linux/nfs/rootfs/ 目錄下。