SDK會在輸出路勁生成u-boot.bin文件,將其改為BOOT.bin,拷貝到SD卡中,為ZedBoard板配置合適的跳線。這時再打開ZedBoard電源,Bootloader會初始化PS,用BitStream配
置PL(包含了我們創建的my_gpio外設),并將操作權移交給U-Boot。U-Boot會自動加載Device Tree、Linux內核鏡像和RootFS,最終啟動Linux。
ZedBoard出場時SD中還帶有zImage、devicetree和rootfs文件,這些文件都可以采用原有的,直接用Xilinx交叉編譯工具編譯寫好的C語言驅動就可以在這個系統上運行并控制外設了。
當然,如果你想自己編譯內核,或者不想采用靜態物理地址的方式調用外設,就需要再往下進行一步,注意這一步對于Linux下控制AXI總線自定義外設并非必要。
為了給有興趣的朋友繼續深入研究做個鋪墊,這里兔子就講一下編譯ZedBoard上運行的Linux內核和設備樹吧。當然這個方法也詳細記錄在ZedBoard_OOB_Design的README文件中。
在PC的Linux環境下(兔子這里是Ubuntu)通過Git指令下載Digilent Linux內核源碼:
git clone git://github.com/Digilent/linux-3.3-digilent.git
切換到ZedBoard Branch:
cd linux-3.3-digilent
git checkout -b zedboard_oob v3.3.0-digilent-12.07-zed-beta
將ZedBoard_OOB_Design中的.config文件拷貝到源碼目錄下,然后編譯內核(指的是ZedBoard_OOB_Design所在目錄):
cp /linux/.config ./.config
make
生成的內核鏡像zImage 位于/arch/arm/boot/文件夾下。
之后修改devicetree_ramdisk.dts文件,加入my_gpio外設信息。
/******* LED & Swtich Controller ******/
my_gpio@75c80000 {
compatible = "xlnx,my_gpio-1.00.a";
reg = <0x75c80000 0x10000>;
xlnx,dphase-timeout = <0x8>;
xlnx,family = "virtex6";
xlnx,c_num_reg = <0x1>;
xlnx,c_num_mem = <0x1>;
xlnx,s-axi-min-size = <0x1ff>;
xlnx,c_slv_awidth = <0x20>;
xlnx,c_slv_dwidth = <0x20>;
xlnx,use-wstrb = <0x0>;
};
通過下面指令生成設備樹,同樣Copy到SD卡中:
./scripts/dtc/dtc -O dtb –I dts –o ./devicetree_ramdisk.dtb \ /linux/devicetree_ramdisk.dts
這個設備樹文件有網友說是將驅動加入到內核中用的,但兔子以為不然。如果不想通過靜態設備物理地址(上面的0x75c80000)來加載驅動,就可以根據這個設備樹信息(具體是通過
xlnx,my_gpio-1.00.a字串)來動態識別設備。
6. SD卡文件內容四(ramdisk8M.image.gz)
Digilent的OOB設計給出了一個ZedBoard上完整的運行的linux系統所需要的所有文件,包括配置FPGA的bit文件、 配置ARM PS系統的First-Stage boot loader(FSBL)和引導linux需要的
Second-Stage boot loader(SSBL)、Linux內核zImage、設備樹文件devicetree_ramdisk.dtb 以及根文件系統ramdisk8M.image.gz。linux在運行時,加載這個ramdisk8M.image.gz
鏡像文件到DDR3中來執行實現根文件系統的建立,很多并不像在ubuntu中對文件系統操作那樣簡單。本小節介紹如何制作ZedBoard可運行的根文件系統ramdisk8M.image.gz鏡像文件,
參照xilinx wiki 。
通過本小節的學習,在以后的開發中,可以更加順利的修改文件系統,給設計帶來方便。
更多更新請關注我的博客:@超群天晴
硬件平臺:Digilent ZedBoard
開發環境:Windows XP 32 bit + Wmare 8.0 + Ubuntu 10.04 + arm-linux-xilinx-gnueabi交叉編譯環境
Zedboard linux: Digilent OOB Design
1、FHS(Filesystem Hierarchy Standard)標準介紹
當我們在linux下輸入ls / 的時候,見到的目錄結構以及這些目錄下的內容都大同小異,這是因為所有的linux發行版在對根文件系統布局上都遵循FHS標準的建議規定。該標準規定了根目錄
下各個子目錄的名稱及其存放的內容:
目錄名
存放的內容
/bin
必備的用戶命令,例如ls、cp等
/sbin
必備的系統管理員命令,例如ifconfig、reboot等
/dev
設備文件,例如mtdblock0、tty1等
/etc
系統配置文件,包括啟動文件,例如inittab等
/lib
必要的鏈接庫,例如C鏈接庫、內核模塊
/home
普通用戶主目錄
/root
root用戶主目錄
/usr/bin
非必備的用戶程序,例如find、du等
/usr/sbin
非必備的管理員程序,例如chroot、inetd等
/usr/lib
庫文件
/var
守護程序和工具程序所存放的可變,例如日志文件
/proc
用來提供內核與進程信息的虛擬文件系統,由內核自動生成目錄下的內容
/sys
用來提供內核與設備信息的虛擬文件系統,由內核自動生成目錄下的內容
/mnt
文件系統掛接點,用于臨時安裝文件系統
/tmp
臨時性的文件,重啟后將自動清除
制作根文件系統就是要建立以上的目錄,并在其中建立完整目錄內容。其過程大體包括:
· 編譯/安裝busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目錄
· 利用交叉編譯工具鏈,構建/lib目錄
· 手工構建/etc目錄
· 制作根文件系統的鏡像文件
下面就來詳細介紹這個過程。
1、編譯安裝busybox,生成/bin、/sbin、/usr/bin、/usr/sbin目錄
首先下載BusyBox源碼,使用命令
git clone git://git.busybox.net/busybox
當然,和往常一樣,為了給上不了國外網站的同學們提供便利,這里提供一個國內的下載鏈接:
busybox下載
下載后,切換到busybox目錄,并進行默認配置
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- defconfig
使用命令
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- menuconfig
打開可視化界面配置,逐一進入
BusyBox Settings->Installation Options->BusyBox installation prefix
將目錄設置為
/home/devel/_rootfs
保存后退出,并安裝busybox
make ARCH=arm CROSS_COMPILE=arm-xilinx-linux-gnueabi- install
評論
查看更多