ZYNQ Linux (u-boot,內核, 設備樹)配置

1、相關網站

zynq linux軟件網站:www.wiki.xilinx.com

zynq u-boot github地址:https://github.com/xilinx

 

2、啓動過程

3、u-boot配置

3.1 下載u-boot

UBOOT有多個版本,可以去網站上下載相應的版本。14.5及早期的版本對Micron的QSPI Flash芯片支持不完整。建議下載後期版本

$ git clone git://git.xilinx.com/u-boot-xlnx.git(下載u-boot源碼命令)

3.2 u-boot參數修改

1)  .\u-boot\arch\arm\cpu\armv7\zynq\clk.c

由於使用的是50M參考時鐘,需要更改參考時鐘

# define CONFIG_ZYNQ_PS_CLK_FREQ    33333333UL更改爲

# define CONFIG_ZYNQ_PS_CLK_FREQ    50000000UL

2)  .\u-boot\include\configs\zynq_zc70x.h

由於使用的是串口0,需要更改串口定義

#define CONFIG_ZYNQ_SERIAL_UART1更改爲

#define CONFIG_ZYNQ_SERIAL_UART0

3)  .\u-boot\include\configs\zynq_zc70x.h

根據DDR實際大小修改內存配置參數

#define CONFIG_SYS_SDRAM_SIZE          (1024* 1024 * 1024)更改爲

#define CONFIG_SYS_SDRAM_SIZE          (512 * 1024 * 1024)(根據實際內存大小修改)

3.3 u-boot編譯

在linux系統下進入u-boot

$ cd u-boot

$ git apply 0001-Xilinx.patch

(這條命令可以不執行,該命令的目的是將ramdisk8M.image.gz改爲ramdisk32M.image.gz)

$ make distclean

$ make zynq_xxx_config

(zynq_xxx是在/include/configs/下的h文件名,根據需要編譯的文件名而定。在執行命令之前,如果要求文件進行編輯,執行gedit xxx.h)

$ make

編譯結束後會在當前文件夾下生成u-boot文件,拷貝後,改成u-boot.elf文件

4、Linux配置

4.1 下載Linux

$ git clonegit://git.xilinx.com/linux-xlnx.git(下載Linux源碼)

4.2 Linux編譯

$su

$cp mkimage /bin

(轉換爲root用戶,將.\u-boot\tools\mkimage文件拷貝到根目錄的bin目錄下,生成uImage文件需要使用)

$ cd linux-xlnx

$ make distclean

$make ARCH=arm xilinx_zynq_defconfig

(xilinx_zynq_defconfig可根據實際情況選擇,目錄爲.\linux-xlnx\arch\arm\configs)

$ make ARCH=arm menuconfig

選擇 Exit

$make ARCH=arm UIMAGE_LOADADDR=0x8000uImage

編譯完成後,生成的uImage文件和zImage文件存放在.\linux-xlnx\arch\arm\boot下

5、Linux設備樹配置

5.1 修改dts文件

從\linux-xlnx\arch\arm\boot\dts目錄下選擇對應的開發板修改,本設計選擇zynq-zc706.dts

$ gedit xxx.dts

(如果不用編輯,可略過此步驟)

對xxx.dts的修改,根據實際配置進行修改,本設計需修改三個地方,一個是更改爲串口0,一個是修改參考時鐘(由33333333改爲50000000),最後修改內存大小配置

 

1、  修改串口地址,修改爲串口0的地址

2、  修改clocks數組中的數值(串口0對應23和40),按照下圖中的clks數組,從0開始。

 

3、修改串口0的中斷號,根據UG585中的中斷號分配表,查找對應的設備中斷號,減去32

4、修改參考時鐘

 

5、修改內存配置(根據硬件實際使用的內存大小修改,本設計中內存大小爲512MB)

 

將修改好的dts文件拷貝到linux-xlnx /scripts/dtc目錄下

5.2 編譯devicetree

$ cd linux-xlnx

$ ./scripts/dtc/dtc -O dtb -I dts -odevicetree.dtb xxx.dts

(如果前面沒有編譯生成uImage文件,此命令會報錯,找不到dtc命令)

將linux-xlnx目錄生成的devicetree.dtb拷貝到相應的地方

5.3 下載ramdisk

從網上下載ramdisk32M.image.gz

由於git clonegit://git.xilinx.com/apps/busybox.git無法正常運行,所以直接拷貝了zed板的文件,未做任何改動。下載地址見:http://download.csdn.net/detail/jj12345jj198999/9717091

6、啓動Linux

6.1 JTAG啓動

超級終端的速率選擇115200

將u-boot.elf,uImage,devicetree.dtb和ramdisk32M.image.gz文件拷貝到工程路徑的/hw目錄下

進入XMD命令窗口

cdD:/shen/switch/v20/20130825prj1/project_1/project_1.sdk/SDK/SDK_Export/hw

(根據實際的工程路徑選擇)

connect arm hw

source ps7_init.tcl

ps7_init

dow -data devicetree.dtb 0x2a00000

(地址可以根據實際情況更改)

dow -data ramdisk32M.image.gz 0x2000000

(地址可以根據實際情況更改)

dow -data uImage 0x3000000

(地址可以根據實際情況更改)

dow u-boot.elf

con

在超級終端上回車

在超級終端上運行 bootm 0x30000000x2000000 0x2a00000(和上面下載地址一致)

對於14.5以前的版本,如果使用的還是ramdisk32M或ramdisk8M,需要注意:

dow -data ramdisk32M.image.gz 0x2000000

(這一步的偏移量和下載文件有關,如果是ramdisk8M.image.gz,偏移量爲0x800000;如果是ramdisk32M.image.gz,偏移量爲0x2000000)

6.2 SD卡啓動

1)在SDK中將FSBL、XXX.bit和u-boot.elf文件生成xxx.bin和xxx.mcs文件,把xxx.bin命名爲boot.bin。

2)SD卡格式化爲FAT32格式,將boot.bin,zImage,devicetree.dtb和ramdisk32M.image.gz(注意使用同一版本)拷貝到SD卡里。

6.3 QSPI啓動

在SDK中,生成啓動文件xxx.bin,運行界面如下所示。

 

圖2 生成QSPI啓動文件

備註:可以根據uImage、devicetree和ramdisk的實際文件大小調整offset,這樣可以調整最終生成的可燒寫文件的大小,在做了offset調整後,在uboot目錄下.\include\configs\zynq-common.h作相應的修改,注意三個文件在QSPI flash中所處的偏移地址一定要和sfread中的一致。另外還要注意讀取到內存中時的數據大小,不能小於文件的實際大小。

 

 

進入XMD命令窗口

connect arm hw

cdD:/shen/switch/v20/20130825prj1/project_1/project_1.sdk/SDK/SDK_Export/hw

(根據實際的工程路徑選擇)

source ps7_init.tcl

ps7_init

dow u-boot.elf

dow -data xxx.bin 0x08000000

(需要燒寫的文件,緩存地址可以改變,如變爲0x04000000)

con

在超級終端中Enter

sf probe 0 0 0

sf erase 0 0x02000000

(32MB,根據實際flash大小調整)

(如果是Micron的Flash,刪除時間比較久,一個subsector(4KB)需要花費0.3s,8192個subsector需要40.96s)

sf write 0x08000000 0 0x01ffffff

(根據實際flash大小調整,緩存地址需要和前面的緩存地址一致)

 

轉自:

https://blog.csdn.net/zhaoxinfan/article/details/53770926

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