在ZC702上运行Linux(4)-编译和使用U-Boot Linux
1. 安装工具链
参考http://wiki.xilinx.com/zynq-tools 下载并安装cross compiler。cross compiler位于http://www.xilinx.com/member/mentor_codebench/xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin
如网页上所说,安装包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开始的,而
在ZC702上运行Linux(4)-编译和使用U-Boot Linux相关推荐
- linux代码windows能跑吗,能不能帮忙改一下下面这些代码,原来是在windows系统上运行的,要让它能在linux上终端跑。该如何处理...
当前位置:我的异常网» C语言 » 能不能帮忙改一下下面这些代码,原来是在windows系 能不能帮忙改一下下面这些代码,原来是在windows系统上运行的,要让它能在linux上终端跑.该如何处理 ...
- 在linux中配置编译u-boot方法,在ZC702上运行Linux(4)-编译和使用U-Boot Linux
1. 安装工具链 如网页上所说,安装包xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin提示系统是dash,而安装包需要bash.按照提示运行命令 sudo ...
- Linux下编译build的命令,【linux基础】20、内核的编译
一.一般src.rpm包的安装 有些软件包是以.src.rpm结尾的,这类软件包是包含了源代码的rpm包,在安装时需要进行编译. src.rpm包=源代码 + specs文件 #specs文件是将源码 ...
- python脚本在linux上运行的两种方式_python脚本当作Linux中的服务启动实现方法
脚本服务化目的: python 在 文本处理中有着广泛的应用,为了满足文本数据的获取,会每天运行一些爬虫抓取数据.但是网上买的服务器会不定时进行维护,服务器会被重启.这样我们的爬虫服务就无法运行.这个 ...
- kali linux怎么编译软件包,如何解决Kali Linux apt-get安装:E:无法找到软件包checkinstall...
本文概述 在我们的一些教程中, 我们希望从源代码构建软件包, 因为这可以帮助你获得更多开发人员的经验, 了解事情的原因等.不幸的是, 一些报告提到了checkinstall软件包安装失败的例外.使用以 ...
- mini2440 linux内核编译与移植 课程设计,linux内核移植步骤-mini2440
建立使用 Fedora 9,版本太高,由于链接库的区别可能造成不可预料的错误.或者说配置相对复杂多了.本教程仅提供给刚接触内核的朋友,大牛们当路过就是,有发现什么错误还望指教. ① 修改顶层的Make ...
- linux安装编译安装 ffmpeg,解决linux下ffmpeg压缩的mp4无法在网页播放问题
ffmpeg官网下载页面:http://www.ffmpeg.org/download.html github下载页面 https://github.com/FFmpeg/FFmpeg/releas ...
- 不装mono,你的.NET程序照样可以在Linux上运行
让.NET应用程序在linux上运行,目前通用的做法就是在Linux上安装mono,然后通过"mono your.exe"命令运行这个程序. 这种运行.net程序的办法有两个弱点, ...
- linux mono运行c 1,不装mono,你的.NET程序照样可以在Linux上运行!
让.NET应用程序在linux上运行,目前通用的做法就是在Linux上安装mono,然后通过"mono your.exe"命令运行这个程序. 这种运行.net程序的办法有两个弱点, ...
最新文章
- .project sturcture和Project Structure 无论是按快捷键或者是从files中打开都不显示
- python测试框架untest怎么循环执行_Python自动化测试-Unittest单元测试框架详解
- MySQL:为什么用limit时,offset很大会影响性能
- 体验 Orbeon form PE 版本提供的 JavaScript Embedding API
- [Leetcode][第120题][JAVA][三角形最小路径和][动态规划][递归]
- C#操作DataReader类
- 深度学习目标检测网络个人总结
- 我的世界java骷髅马_我的世界1.9版本新功能曝光 骷髅马正式加入
- php列表调多图,列表中调用多图显示的文章
- CentOS 7下安装samba
- linux用户管理和群界面怎么打开,Linux命令行界面下的用户和组的管理
- 最基础eacharts图带数字,百分比,tab切换
- android 存储盘 dcim,Android上的DCIM目录路径 – 返回值
- Matlab R2019a Win64位 迅雷下载链接
- Category底层原理实现
- java分解因式_Java将一个整数因式分解
- art-template模板引擎和其它第三方模块搭配使用
- 对射式光电传感器测速使用CD10406消抖动解决办法
- 小木虫好中的ei期刊图像处理
- CSV格式转换为xlsx格式
热门文章
- boost::inplace_merge相关的测试程序
- boost::histogram::axis::circular用法的测试程序
- boost::hana::max用法的测试程序
- boost::geometry::strategy::vincenty用法的测试程序
- boost::fusion::traits::is_view用法的测试程序
- ITK:将网格写入vtp文件
- VTK:PolyData之MergeSelections
- VTK:PolyData之LinearExtrusion
- VTK:网格之FillHoles
- VTK:灯光之LightActor