嵌入式linux與物聯網進階之路一:基於荔枝派nano的u-boot移植

前言

之前一直嘗試做一塊自己的linux板子,但是一直未能得償所願,最關鍵原因還是自己的電路知識過於薄弱,同時pcb製作也不是很純熟,所以就擱置了。後來,翻閱了大量的設計資料,發現如果嘗試做一塊自己的linux板子的話,很多電路模塊,比如usb轉ttl模塊,tf卡電路模塊,電源管理模塊,晶振模塊等等,其實大家的設計基本上是一樣的,且在網上也能夠找到成熟的設計方案。所以後面我會嘗試設計一套自己的linux板子,然後再嘗試進行嵌入式方面的開發。這裏,我先入手了一塊荔枝派nano的板子,用來研究如何進行uboot燒寫和linux移植先,話不多說,今天主要來講解如何進行uboot移植吧。

虛擬機上的串口和usb設置

首先,在開始之前,我們需要準備一下編譯環境,自不必說,linux發行版本,由於天生具有良好的編譯環境設定,所以我們選用了ubuntu 64位的系統,然後在vmware虛擬機中做一套出來。虛擬機安裝ubuntu系統,這裏就不提了。

之後,ubuntu安裝完畢後,如果想讓物理機的u盤或者是串口能交互到unbuntu上,我們需要對虛擬機進行設置。

針對串口設備,比如usb2ttl這種,需要設置如下:

 之後,啓動ubuntu進入系統後,會有彈窗提醒你要將串口連接到物理設備還是虛擬設備中,這裏我們點擊虛擬設備,然後選中我們的ubuntu系統即可。這樣串口就連接到虛擬機了,可以使用命令查看一下:

需要注意的是,串口連上來,一定是形如ttyUSB*的形式,至於是數字幾,我們可以通過插入串口設備後,執行一下ls /dev/tty*, 然後拔掉串口設備後,再執行一下ls /dev/tty*,看看哪個設備下掉了,則串口設備名稱就是這個。

之後,我們利用命令 sudo apt install minicom命令來安裝minicom串口管理工具,之後,我們利用sudo minicom -s來進行設置,將串口設置爲ttyUSB0:

設置完畢後,保存並推出,我們的串口就設定好了。

針對U盤,請確認一定要是usb電路,單純的tf卡套這種,在ubuntu是無法識別的,需要利用usb讀卡器纔行,usb設置如下:

這樣設置完畢後,usb插入到電腦,然後在虛擬機右下角就可以看到usb連接上來了,可以使用命令查看一下:

由於我這裏對usb做了插拔,這裏很容易看出來,我的usb名稱是sdb,其中一個分區是sdb1

這樣,我們串口和usb都設定好了。

U-Boot編譯環境設定

U-Boot編譯,由於採用的是荔枝派nano,其芯片是f1c100s,是基於arm的,所以這裏我們的交叉編譯鏈要使用arm的,這裏使用Linaro提供的交叉編譯工具。

下載地址爲:http://releases.linaro.org/,注意區分32位與64位,由於我們是64位系統,所以這裏我們下載64位的:

  64位下載地址:http://releases.linaro.org/components/toolchain/binaries/6.1-2016.08/arm-linux-gnueabi/gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabi.tar.xz

  32位下載地址:http://releases.linaro.org/components/toolchain/binaries/6.1-2016.08/arm-linux-gnueabi/gcc-linaro-6.1.1-2016.08-i686_arm-linux-gnueabi.tar.xz

下載完畢後,我們需要將數據傳輸到虛擬機中,這裏我推薦一個小工具:hfs,文件傳輸上去後,解壓到/home/scy/linux-mi/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/目錄下

這時候,我們需要將此目錄添加到環境變量中並執行命令,查看配置生效:

#打開文本
nano ~/.bashrc 

#將此命令加到文本最後一行,ctrl+s保存,ctrl+x退出
export PATH=$PATH:/home/scy/linux-mi/gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu/bin

#使配置生效
source ~/.bashrc

#執行如下命令,校驗配置生效

可以看到輸出了信息,配置已生效。

之後,我們開始進行uboot編譯,這裏需要先下載uboot源碼,從https://github.com.cnpmjs.org/Lichee-Pi/u-boot/tree/nano-v2018.01下載這個分支壓縮包,然後利用hfs上傳到虛擬機上並解壓到/home/scy/linux-mi/u-boot-nano-v2018.01目錄

之後進入此目錄,執行如下命令:

#如果需要生成在sdram裏啓動的uboot,我們採用這個
make ARCH=arm licheepi_nano_defconfig

#如果需要生成在spiflash裏啓動的uboot
make ARCH=arm licheepi_nano_spiflash_defconfig

此操作會將配置文件進行寫入:

然後執行:

make  ARCH=arm V=s  -j8 CROSS_COMPILE=arm-linux-gnueabi-

則開始進行編譯操作,需要注意的是,需要指明交叉編譯鏈,同時-j可以來指定併發線程數,這個數量可以根據機器的性能更改,整體輸出如下:

這裏我們可以看到最後生成的bin文件就是我們需要的文件。需要說明一下,如果在編譯過程中,有任何錯誤,都可以使用apt install來進行安裝,我在編譯過程中,基本上安裝過如下幾個組件:

    sudo apt install swig

    sudo apt install python-dev

    dtc: not found       dtc是device-tree-compiler的縮寫,即設備樹編譯器,說明系統中沒有安裝這個編譯器
    sudo apt-get install device-tree-compiler

這樣我們就編譯成功了。

 U-Boot燒寫

既然編譯成功後,那麼這裏就需要進行燒寫了。

燒寫的話,我們首先需要對我們的usb進行格式化,然後去掉所有分區,這裏我們採用的工具是gparted,通過sudo apt install gparted來進行安裝,之後啓動並插入我們的usb:

這裏可以看到我們的usb,上面有了個分區,我們先對sdb1分區進行卸載,然後再進行刪除,之後保存執行即可:

到這裏,盤就乾淨了,我們開始燒寫吧,需要在uboot目錄執行如下命令:

sudo dd if=spl/sunxi-spl.bin of=/dev/sdb bs=1024 seek=8

這句命令的意思是,如果找到了spl目錄下的sunxi-spl.bin文件,則拷貝到我們的usb中,sdb就是我們的usb, 位大小爲1mb,偏移爲8,看下執行結果:

這裏可以看到我們寫入成功了,現在,我們將usb中的卡拿下來,插入到usb2ttl中,看看串口的顯示吧,需要在命令行中輸入sudo minicom來提前打開串口:

此時還沒有任何輸入,我們將usb2ttl重新插拔下,或者是將荔枝派nano上的5v電源線重新插拔一下,輸出結果如下:

可以看到輸入了信息,但是因爲沒有linux內核,所以引導失敗,我們看下環境變量信息:

再看下bd信息:

可以說整體uboot從sd卡移植成功。

接下來,我們就需要創建一個分區,爲fat16,裏面放上設備樹文件和zimage,
zimage是linux內核
rootfs是根文件系統

參考

http://nano.lichee.pro/get_started/first_eat.html

https://blog.csdn.net/p1279030826/article/details/112672535  值得看一下,燒錄結果和我的一致 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章