日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux xilinx,Xilinx-在ZC702上运行Linux(4)-编译和使用U-Boot Linux

發布時間:2024/3/12 linux 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux xilinx,Xilinx-在ZC702上运行Linux(4)-编译和使用U-Boot Linux 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 安裝工具鏈

如網頁上所說,安裝包xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin提示系統是dash,而安裝包需要bash。按照提示運行命令

sudo dpkg-reconfigure -plow dash

選擇No。然后重新運行安裝包。

缺省情況下安裝后的工具鏈位于

~/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin

bash> export CROSS_COMPILE=arm-xilinx-linux-gnueabi-

bash> export PATH=

/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin:$PATH

一般是/home/

bash> export ARCH=arm

可以把配置命令都放到一個文件setup里面,然后用以下命令使之生效:

. ./setup

2. 編譯U-Boot

bash> git clone git://git.xilinx.com/u-boot-xarm.git

bash> cd u-boot-xarm

bash> make zynq_zc70x_config

bash> make

缺省情況下下載的是master分支,如果需要在特定分支上工作可以:

git checkout -b xilinx-14.3-build2

可以用以下命令確認本地源碼是哪個分支:

git branch -l

對U-Boot來說,當前的master和xilinx-14.3-build1/xilinx-14.3-build2 /xilinx-14.3-build2-trd是一回事。

對Linux kernel來說,標簽xilinx-14.3-build2/xilinx-14.3-build2-trd的時間是2012-10-23,master的最近更新時間是2012-10-26,在標簽xilinx-14.3-build2后又有7次更新。

當前的時間:2012/11/15

3. 編譯Linux

bash> git clone git://git.xilinx.com/linux-xlnx.git

bash> cd linux-xlnx

bash> make xilinx_zynq_defconfig

bash> make uImage

到最后一步生成uImage的時候,提示沒有找到mkimage,這時可以把u-boot/tools下面的mkimage拷貝到/usr/bin重新make即可uImage。

4. 使用U-BOOT和zImage

Zynq的ROM會在SD卡上尋找一個叫做BOOT.BIN的文件。用SDK生成ZC702的fsbl,以及編譯生成的u-boot(需要改名為u-boot.elf)可以生成這個文件。盡管最新的wiki要求用SDK 14.3,實際上我用的SDK 14.2也沒有什么問題。

打開SDK->XilinxTools->Create Boot Image窗口,Bif file下拉框選擇”Create a new bif file…”,FSBL file選中SDK生成的fsbl,點擊Add增加u-boot.elf,設置好output folder,點擊Create Image即可生成3個文件:

bootimage.bif

u-boot.bin

u-boot.mcs

將u-boot.bin改名為BOOT.BIN就可以使用了。

注意:

1. 底層調用的bootgen只能識別.elf和.bit的文件,如果編譯生成的u-boot(盡管已經是ELF格式了)不添加擴展名,無法Create Image。如果擴展名是這兩個以外的,例如.fle,生成的文件不正確,size明顯要大很多。

2. 之前有過一次Create Image失敗,懷疑是因為路徑里面有特殊字符(-或者.),后來測試發現不是。估計原因有可能是路徑名太長,有待驗證。

用生成的BOOT.BIN和uImage替換SD卡上的同名文件,啟動正常。

5. Board Support Package (BSP)

一部分代碼在arch/arm/mach-zynq

Hardware BlockDriver NameNotesDetailed Page

GICgic.cin arch/arm/common

PL330pl330.ca different driver now exists in kernel.org

PS2ps2.csupport for keyboard and mouse in QEMU

SCU Global Timerscu_gtimer.cprovides primitive abilities only

System Level Control Registersslcr.cSLCR

Triple Timer Countertimer.cOnly supports 1 TTC currently

其他的外設和驅動源文件的的對應關系如下:

Hardware BlockDriver NameNotesDetailed Page

CANnot supported

GEMxilinx_emacps.c

GPIOxilinx_gpiops.c

I2Ci2c-xilinx_ps.c

NANDxilinx_nandpss.c

QSPIxilinx_qspipc.c

SCU WDTxilinx_scuwdt.c

SPIxilinx_spips.c

System WDTxilinx_wdtps.c

UARTxilinx_uartps.c

USB Hostehci-xilinx-usbps.c

USB Devicexilinx_usbps_udc.c

USB OTGxilinx_usbps_otg.c

6. Device Tree

Device Tree實際上是一種硬件描述方法。通過data和code分離的方式,達到一個kernel image可以支持多種硬件平臺的目的。具體表現形式有兩種:

device tree source (.dts): 描述硬件平臺的文本文件

device tree blob (.dtb): 通過.dts編譯生成,在Linux啟動前加載到內存,然后Linux kernel根據這個文件初始化自己

Xilinx ARM kernel使用device tree。 在Linux kernel 3.0之前, 大多數ARM Linux kernels使用platform data,并不支持。對ARM平臺,dts一般放在./arch/arm/boot/dts/

Device Tree的使用方式有兩種:

任意內存地址方式:U-Boot將devicetree.dtb的內存地址作為bootm的第三個參數,kernel通過寄存器R2找到device tree。從14.3開始,這個方法開始作為Linux kernel的缺省配置。

固定內存地址方式:devicetree.dtb被硬編碼在16Mb的位置,這主要是為了在u-boot下使用go 命令 (這個命令不會配置R2寄存器)。Kernel里面有一個”System Type->Xilinx Specific Options->Device Tree At Fixed Address”配置項,需要使能device tree后才可見。

從Linux kernel 3.3開始,device tree可以支持中斷號。不過要注意這個中斷號需要在Zynq-7000 EPP TRM Table 7-3 查表得到的值上減去32。例如:查表得到UART 1的IRQID為82,所以device tree 中UART1的中斷號要填寫為50。

7. Kernel Command Line獲取方式:

缺省情況下,從device tree獲取。

通過配置kernel (Boot Options->Always use the default kernel command string),使用硬編碼的command line。

8. 編譯Device Tree

bash> scripts/dtc/dtc -I dts -O dtb -o

注意:device tree compiler (dtc) binary需要在kernel configuration里面打開device tree后才會出現在scripts/dtc/目錄。

Linux源碼里面的dts和pre-built dts略有區別。修改zynq-zc702.dtc的Linux command line中ip部分:

原始的:ip=:::::eth0:dhcp

修改后的:ip=192.168.1.10:::255.255.255.0:ZC702:eth0

編譯后生成了dtb,經過比較,確認和pre-built package里面的devicetree.dtb完全一致。

9. SMP

通過boot log和以下命令可以看到在ZC702上兩個Cortex-A9都在運行中

zynq> cat /proc/cpuinfo

如果需要只運行一個核,需要在device tree里面的kernel command line里面加上"maxcpus=1"

如果需要指定某個應用運行在特定的CPU core上,可以用taskset命令。BusyBox支持該命令。

The following command will display the help information for the taskset command.

zynq> taskset 2 top

需要注意的是,taskset的CPU core編號是從1開始的,而不是從0開始。

總結

以上是生活随笔為你收集整理的linux xilinx,Xilinx-在ZC702上运行Linux(4)-编译和使用U-Boot Linux的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。