在Linux系統下通過TFTP或NFS燒寫核心
注:我之前在cnblog上釋出的這篇文章,現在把這篇教程釋出到CSDN上面
一直想直接通過Linux系統往JZ2440開發板中燒寫核心,但網上的教程千篇一律都是藉助Windows平臺上的TFTP工具燒寫的,十分不爽,因為我不喜歡在虛擬機器上玩Linux!摸索了一下午,終於搞定了,下來記錄一下燒錄過程。本文主要講訴TFTP燒寫核心的過程,NFS的先挖個坑。
#開發環境
- Linux 16.04 LTS(需要配置好TFTP)
- JZ2440V3
Linux配置TFTP
sudo apt-get install tftpd-hpa tftp-hpa sudo vim /etc/default/tftpd-hpa
vim終端資訊修改為:
圖片裡的配置資訊為:
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/china/ftproot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"
裡面的TFTP_DIRECTORY
路徑可以這樣看到,以後用tftp協議傳輸時,檔案需要拷貝到這個資料夾裡面!
每修改一次配置資訊,都需要重啟一次tftp服務
sudo service tftpd-hpa restart
驗證TFTP服務正常開啟,這個ip地址是本機的ip地址
tftp 192.168.1.218
tftp> get hello
tftp> quit
tftp配置成功!下面開始記錄如何在Linux下通過tftp服務燒寫核心。
在Linux系統下通過TFTP服務燒寫核心
第一步:在Linux下通過minicom串列埠助手連線JZ2440開發板
啟動JZ2440開發板後,點選鍵盤,不讓其啟動裡面的Linux系統,如圖:
這個時候要輸入q
方可出現OpenJTAG介面
OpenJTAG>
第二步:配置網路環境
這個時候需要按照JZ2440配套的PDF資料裡的韋東山講解配置網路了,否則不能讓Linux和JZ2440開發板通訊。
配置要求
- 讓開發板網段和Linux系統處於同一網段(如IP地址為192.168.1.x)
- 閘道器配置一致
現在可以在Linux下通過ifconfig
命令檢視IP地址,可以通過route -n
命令檢視閘道器
然後在OpenJATG介面使用命令配置u-boot的網路環境
set ipaddr 192.168.1.18
set serverip 192.168.1.218
set gatewayip 192.168.1.1
- 第一行命令是配置開發板的IP地址,保證在同一網段的情況下不衝突即可
- 第二行命令是配置作為服務端的Linux地址,這個IP地址是通過上面的
ifconfig
得到的,不可胡寫! - 第三行命令是配置閘道器,通過上面的
route -n
得到,不可胡寫!
韋東山的文件細節如下,詳情可參考這個PDF文件。
在OpenJATG中
ping 192.168.1.218
一下,看能不能出來alive
呢?
說明配置正確!O(∩_∩)O哈哈~
可以使用print
檢視配置情況,其他命令可以詳見help
網路環境配置成功!呼啦啦~
第三步:開始放大招了——燒核心!
1)把要燒寫的uImage核心檔案copy到Linux系統下的tftp服務掛載資料夾下面,如圖:
細心的小夥伴發現了,這個uImage的許可權被調到了最高,是的,必須要這樣做,否則在接下來的傳輸中會出現permission denied
哦,圖片中的lm
命令是我自定義的命令,和ls -al
的作用是一樣一樣的。
2)進入minicom串列埠助手裡面
那個
OpenJATG>
還在等你輸入命令呢。
現在要參考韋東山《嵌入式Linux應用開發完全手冊》P291中的內容:
不要著急在
OpenJATG>
命令列中輸入書本上的命令,這些命令有三分之二都是過時的!估計這個命令是適配JZ2440V1版本的,而我這個是V3版本的
因為我在按照上面命令燒寫核心時,板子根本啟動不了Linux系統!最後返回來在Windows平臺下通過DNW工具燒寫發現問題所在了。
左邊是通過DNW正確的擦除和寫入資訊,右邊呢… …
所以,要在
OpenJATG>
中輸入以下命令:
tftp 0x30000000 uImage
nand erase 0x60000 0x00200000
nand write.jffs2 0x30000000 0x60000 $(filesize)
燒寫完後,直接執行以下命令就可以啟動了
OpenJATG> boot
下圖來自Ubuntu18.04 LTS測試