?
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-bootarcharmcpuarmv7zynqclk.c
由于使用的是50M參考時鐘,需要更改參考時鐘
# define CONFIG_ZYNQ_PS_CLK_FREQ??? 33333333UL更改為
# define CONFIG_ZYNQ_PS_CLK_FREQ??? 50000000UL
2)? .u-bootincludeconfigszynq_zc70x.h
由于使用的是串口0,需要更改串口定義
#define CONFIG_ZYNQ_SERIAL_UART1更改為
#define CONFIG_ZYNQ_SERIAL_UART0
3)? .u-bootincludeconfigszynq_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 oolsmkimage文件拷貝到根目錄的bin目錄下,生成uImage文件需要使用)
$ cd linux-xlnx
$ make distclean
$make ARCH=arm xilinx_zynq_defconfig
(xilinx_zynq_defconfig可根據實際情況選擇,目錄為.linux-xlnxarcharmconfigs)
$ make ARCH=arm menuconfig
選擇 Exit
$make ARCH=arm UIMAGE_LOADADDR=0x8000uImage
編譯完成后,生成的uImage文件和zImage文件存放在.linux-xlnxarcharmoot下
5、Linux設備樹配置
5.1 修改dts文件
從linux-xlnxarcharmootdts目錄下選擇對應的開發板修改,本設計選擇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目錄下.includeconfigszynq-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大小調整,緩存地址需要和前面的緩存地址一致)?
評論
查看更多