*** e.g. console=, root=/dev/ram rw ip=:::::eth0:dhcp earlyprintk
*** Some example values for are ttyPS0 when using Zynq, ttyUL0 when using the UART Lite soft ip, or ttyS0 when using the UART16550 soft ip.
In the Linux source directory, there are also some DTS files available for use in linux-xlnx/arch//boot/dts/.
Compiling a Device Tree Blob (.dtb) file from the DTS
A utility called DTC is used to compile the DTS file into a DTB file. DTC is part of the Linux source directory. linux-xlnx/scripts/dtc/ contains the source code for DTC and needs to be compiled in order to be used. One way to compile the DTC is to build the Linux tree.
Once the DTC is available, the tool may be invoked to generate the DTB:
./scripts/dtc/dtc -I dts -O dtb -o .dtb .dts
DTC may also be used to convert a DTB back into a DTS:
./scripts/dtc/dtc -I dtb -O dts -o .dts .dtb
Alternative: For ARM only
In the Linux source directory, making the target 'dtbs' will compile all DTS files from linux-xlnx/arch/arm/boot/dts/ into DTB files.
make ARCH=arm dtbs
The compiled DTB files will be located in linux-xlnx/arch/arm/boot/dts/.
A single linux-xlnx/arch/arm/boot/dts/.dts may be compiled into linux-xlnx/arch/arm/boot/dts/.dtb:
make ARCH=arm .dtb
5.2. 懶兔子博客方法
在上一篇博文中,我已經介紹了建立AXI總線自定義外設的全過程,包括Verilog邏輯部分,和裸機軟件部分。裸機控制外設是非常簡單的,與普通的單片機并無二異,但僅僅有裸奔代碼還遠遠
無法發揮Cortex-A9硬核的作用,畢竟Zynq芯片集成了一顆最高能跑到1GHz的雙核CPU(ZedBoard上的XC7Z020只能到800MHz)。并且ZedBoard上配備了Gigabit Ethernet、HDMI
和USB OTG接口,不運行操作系統豈不浪費。
有朋友想要在ZedBoard上做WinCE,但這方面的資料極為稀缺,而WinCE又是體積龐大、版權成本很高的操作系統,于是開源有小巧的嵌入式Linux就成了首選。之前兔子為了做出圖形界
面,還致力于移植桌面型的Linaro Ubuntu系統,不過ADI給出的參考例子未經優化奇卡無比,Xillinux正式版遲遲未現又只支持色彩度很低的簡易VGA接口(ZedBoard上的VGA甚至到不了
16位色),于是兔子不得不放棄之前的工作,重新啟用ZedBoard出廠默認的輕量級Linux上。這個系統沒有圖形桌面,但已包含了網卡、HDMI驅動和其他基本功能,足夠使用了。
想要在Linux下控制外設,最重要的一環就是驅動了,但在動手寫驅動之前,先要做些準備工作。為了減少工作量,我們就直接修改ZedBoard的出廠Demo,加入之前完成的my_gpio外設,
并通過U-Boot實現Bootloader功能。這個Demo的源工程可以在Digilent網站的ZedBoard頁面找到:
?NavPath=2,400,1028&Prod=ZEDBOARD
點擊下面的Download,可以下載到ZedBoard_OOB_Design.zip文件,這個壓縮包里包含了XPS工程、U-Boot文件、Linux內核配置文件、DeviceTree源文件、rootfs等。README.txt
中有相近的操作說明,建議通讀一遍。
ZedBoard上默認的XPS系統工程位于hw\xps_proj文件夾下,雙擊system.xmp打開工程,按照之前所說的方法,將my_gpio外設IP核導入到工程中。
傳送門:ZedBoard學習手記(二) 開發自定義AXI總線外設IP核——以LED和開關為例
之后,查看一下XPS是否為我們的外設分配了地址空間,如果沒有,就需要手動設置一個地址,這里我們設成0x75C80000,空間大小為AXI設備統一的64K。
按照ZedBoard學習手記(二)中的方法設置總線連接,結果如下圖:
修改xps_proj\data\system.ucf文件,為my_gpio外設分配外部引腳(ucf約束文件中的引腳名稱和Ports中的一定要相同,已經有不少網友在這里出過問題了)。另外我們分配的引腳占用
了原來ARM的GPIO 引腳位置,應在XPS的Port列表里將processing_system7_0_GPIO數量設為[0:6]或干禁用,以除后患。
完成后先單擊Generate BitStream生成配置數據,再點擊Export Design,選Export & Launch SDK將硬件信息導出到SDK中。
在SDK里,新建一個C工程,不同于裸機的HelloWorld,這次要建立的是Bootloader,因此選擇FSBL工程,即First Stage Bootloader,用實現U-Boot之前的初始化和啟動工作。其他
選項默認即可。
編譯一下工程,完成后SDK會生成FSBL的elf文件,另外加上從XPS導出的System.bit,以及我們在第一篇文章中編譯生成的u-boot.elf,就可以生成用來實現SD卡啟動系統的完整Bootloader文件了。
u-boot.elf在ZedBoard_OOB_Design中包含,不過這個兔子沒試過,通過Xilinx U-Boot編譯生成u-boot.elf的方法請見:ZedBoard學習手記(一) First Step——建立Xilinx交叉編譯環境
集齊這三個文件之后,點擊Xilinx Tools→Create Boot Image,添加到列表中,選擇一個輸出路徑,就可以創建Bootloader了。
評論
查看更多