*** 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. 懶兔子博客方法
在上一篇博文中,我已經(jīng)介紹了建立AXI總線自定義外設(shè)的全過(guò)程,包括Verilog邏輯部分,和裸機(jī)軟件部分。裸機(jī)控制外設(shè)是非常簡(jiǎn)單的,與普通的單片機(jī)并無(wú)二異,但僅僅有裸奔代碼還遠(yuǎn)遠(yuǎn)
無(wú)法發(fā)揮Cortex-A9硬核的作用,畢竟Zynq芯片集成了一顆最高能跑到1GHz的雙核CPU(ZedBoard上的XC7Z020只能到800MHz)。并且ZedBoard上配備了Gigabit Ethernet、HDMI
和USB OTG接口,不運(yùn)行操作系統(tǒng)豈不浪費(fèi)。
有朋友想要在ZedBoard上做WinCE,但這方面的資料極為稀缺,而WinCE又是體積龐大、版權(quán)成本很高的操作系統(tǒng),于是開(kāi)源有小巧的嵌入式Linux就成了首選。之前兔子為了做出圖形界
面,還致力于移植桌面型的Linaro Ubuntu系統(tǒng),不過(guò)ADI給出的參考例子未經(jīng)優(yōu)化奇卡無(wú)比,Xillinux正式版遲遲未現(xiàn)又只支持色彩度很低的簡(jiǎn)易VGA接口(ZedBoard上的VGA甚至到不了
16位色),于是兔子不得不放棄之前的工作,重新啟用ZedBoard出廠默認(rèn)的輕量級(jí)Linux上。這個(gè)系統(tǒng)沒(méi)有圖形桌面,但已包含了網(wǎng)卡、HDMI驅(qū)動(dòng)和其他基本功能,足夠使用了。
想要在Linux下控制外設(shè),最重要的一環(huán)就是驅(qū)動(dòng)了,但在動(dòng)手寫驅(qū)動(dòng)之前,先要做些準(zhǔn)備工作。為了減少工作量,我們就直接修改ZedBoard的出廠Demo,加入之前完成的my_gpio外設(shè),
并通過(guò)U-Boot實(shí)現(xiàn)Bootloader功能。這個(gè)Demo的源工程可以在Digilent網(wǎng)站的ZedBoard頁(yè)面找到:
?NavPath=2,400,1028&Prod=ZEDBOARD
點(diǎn)擊下面的Download,可以下載到ZedBoard_OOB_Design.zip文件,這個(gè)壓縮包里包含了XPS工程、U-Boot文件、Linux內(nèi)核配置文件、DeviceTree源文件、rootfs等。README.txt
中有相近的操作說(shuō)明,建議通讀一遍。
ZedBoard上默認(rèn)的XPS系統(tǒng)工程位于hw\xps_proj文件夾下,雙擊system.xmp打開(kāi)工程,按照之前所說(shuō)的方法,將my_gpio外設(shè)IP核導(dǎo)入到工程中。
傳送門:ZedBoard學(xué)習(xí)手記(二) 開(kāi)發(fā)自定義AXI總線外設(shè)IP核——以LED和開(kāi)關(guān)為例
之后,查看一下XPS是否為我們的外設(shè)分配了地址空間,如果沒(méi)有,就需要手動(dòng)設(shè)置一個(gè)地址,這里我們?cè)O(shè)成0x75C80000,空間大小為AXI設(shè)備統(tǒng)一的64K。
按照Z(yǔ)edBoard學(xué)習(xí)手記(二)中的方法設(shè)置總線連接,結(jié)果如下圖:
修改xps_proj\data\system.ucf文件,為my_gpio外設(shè)分配外部引腳(ucf約束文件中的引腳名稱和Ports中的一定要相同,已經(jīng)有不少網(wǎng)友在這里出過(guò)問(wèn)題了)。另外我們分配的引腳占用
了原來(lái)ARM的GPIO 引腳位置,應(yīng)在XPS的Port列表里將processing_system7_0_GPIO數(shù)量設(shè)為[0:6]或干禁用,以除后患。
完成后先單擊Generate BitStream生成配置數(shù)據(jù),再點(diǎn)擊Export Design,選Export & Launch SDK將硬件信息導(dǎo)出到SDK中。
在SDK里,新建一個(gè)C工程,不同于裸機(jī)的HelloWorld,這次要建立的是Bootloader,因此選擇FSBL工程,即First Stage Bootloader,用實(shí)現(xiàn)U-Boot之前的初始化和啟動(dòng)工作。其他
選項(xiàng)默認(rèn)即可。
編譯一下工程,完成后SDK會(huì)生成FSBL的elf文件,另外加上從XPS導(dǎo)出的System.bit,以及我們?cè)诘谝黄恼轮芯幾g生成的u-boot.elf,就可以生成用來(lái)實(shí)現(xiàn)SD卡啟動(dòng)系統(tǒng)的完整Bootloader文件了。
u-boot.elf在ZedBoard_OOB_Design中包含,不過(guò)這個(gè)兔子沒(méi)試過(guò),通過(guò)Xilinx U-Boot編譯生成u-boot.elf的方法請(qǐng)見(jiàn):ZedBoard學(xué)習(xí)手記(一) First Step——建立Xilinx交叉編譯環(huán)境
集齊這三個(gè)文件之后,點(diǎn)擊Xilinx Tools→Create Boot Image,添加到列表中,選擇一個(gè)輸出路徑,就可以創(chuàng)建Bootloader了。
評(píng)論
查看更多