在Microzed上构建嵌入式linux系统(ubuntu16.04下)
然后参照: 或者陆佳华老师的《嵌入式系统软硬件协同设计实战指南》第九章,生成boot.bin文件。
3.编译uImage
(1)在网上下载:" linux-xlnx-xilinx-v2015.1.zip",解压到build,cd 到 linux-xlnx-xilinx-v2015.1 里。
(2)
sudo su
sudo apt install u-boot-tools
sudo apt install libncurses5-dev//防止make menuconfig时缺少这个库文件
(3)编译出来的目标是针对ARM体系结构的。因为是针对ARM体系结构,所以需要使用交叉编译器。
export CROSS_COMPILE=arm-none-linux-gnueabi-
make ARCH=arm xilinx_zynq_defconfig
make ARCH=arm menuconfig
make ARCH=arm UIMAGE_LOADADDR=0x8000 uImage
(6)打印出:
Image Name: Linux-3.18.0-xilinx
Created: Tue Jul 19 16:00:07 2016
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 3477600 Bytes = 3396.09 kB = 3.32 MB
Load Address: 00008000
Entry Point: 00008000
Image arch/arm/boot/uImage is ready
4.创建设备树
(1)(注意这是linux-xlnx/arch/arm/boot/dts/目录下存在的dts文件才可以生成dtb文件,以下以zedboard为例)在Linux源代码目录下(我的是"/home/ds/build/linux-xlnx-xilinx-v2015.1"), 编译目标为"dtbs"时会把所有的dts文件编译成dtb文件,所有的dts文件和生成的dtb文件都位于linux-xlnx/arch/arm/boot/dts/目录下
cd 到linux-xlnx-xilinx-v2015.1下
make ARCH=arm dtbs
zynq-zed.dtb是我们需要的文件,改名为devicetree.dtb
如果只想生成zynq-zed.dtb,在linux源代码根目录输入以下命令即可
make ARCH=arm zynq-zed.dtb
或者用设备树编译器对dts文件进行编译生成:
apt-get install device-tree-compiler
cd /home/ds/build/linux-xlnx-xilinx-v2015.1/arch/arm/boot/dts
dtc -O dtb -I dts -o zynq-zed.dtb zynq-zed.dts
——但是里面没有我们想要的zynq-microzed.dts文件,因此只能用别的方法,这里介绍是为了给用其他开发板的读者带来方便
(2)从步骤六可以下载到microzed_7010_7020_petalinux_SD_images ,里面有devicetree_microzed_2014_4.dts,可以生成。
也可以用Vivado创建一个Microzed的项目生成比特流后导入到SDK,File—>New—>Board Support Package—>Board Support Package OS : device-tree—>Finish命令—->在弹出的Setting对话框中,设置bootargs的Value值为:console=ttyPS0,115200 root= /dev/ram/ rw earlyprintk—>在console device的Value下拉菜单中选择ps7_uart_1,单击OK按钮。(这里的bootargs参数是内核的命令行参数,在内核启动阶段,这些参数被传递给内核。这里root= /dev/ram 指的是内核从内存启动文件系统,U-boot将uramdisk.image.gz加载到内存后将其内存地址传递给内核,内核就知道该从什么地方运行文件系统了。但是我们知道Zedboard上的内存只有512M,况且uramdisk.image.gz最大只能到32M,那么当在构建较大的系统时该怎么办呢?解决这一问题有两种方法,第一个仍然使用uramdisk.image.gz作为文件系统,然后将需要加载到用户系统文件放到FAT分区中,当操作系统启动后,将FAT分区挂载到系统中,然后进行相应的访问。第二种方法则是将文件系统放到SD卡的EXT分区中就像第一章中启动linaro_ubuntu桌面系统一样,这里唯一需要修改的是将这里的启动参数root=/dev/ram改为root=/dev/mmcblk0p2。)——>编译结束后,device-tree_bsp_0/ps7_cotexa9_0/libsrc/device-tree_v0_00_x目录下可以看到xilinx.dts文件生成。这里的xilinx.dts不是完美的,如果在Zedboard上使用还要根据实际的情况修改, 找到已经修改好的xup_zed.dts,该文件对ethernet的mdio参数进行修改。
cd ~/build/linux-xup
./scripts/dtc/dtc -I dts -O dtb -o devicetree.dtb xilinx.dts
当然这个过程可逆,可以将一个.dtb转换成.dts
./scripts/dtc/dtc -I dtb -O dts -o xilinx.dts devicetree.dtb
或者将xilinx.dts 放入arch/arm/boot/dts 文件夹中,然后使用下面的命令生成devicetree.dtb。
make ARCH=arm xilinx.dtb
cp arch/arm/boot/dts/xilinx.dtb ./devicetree.dtb
5.生成uramdisk.image.gz
(1)在+and+Modify+a+Rootfs下载arm_ramdisk.image.gz(该网址也有过程)
(2)在build目录中:mkdir filesys ,cd filesys, 把arm_ramdisk.image.gz 放到filesys目录中
(3)cp arm_ramdisk.image.gz ramdisk.image.gz
(4)gunzip ramdisk.image.gz
(5)mkdir file_tmp
(6)sudo mount ramdisk.image -o loop ./file_tmp/(或者sudo mount -o loop ramdisk.image file_tmp)
(7)此时文件系统已经挂载到了film_tmp目录中,你可以到film_tmp目录中对文件系统进行相应的修改。修改完后将文件系统umount并重新压缩即可。这里如果你要制作EXT文件系统,则只需要将SD卡插到PC机中,并将file_tmp文件夹的内容复制到SD卡的EXT分区中即可。
(8)sudo umount file_tmp/
(9)gzip ramdisk.image
(10)sudo apt-get install u-boot-tools
(11)mkimage -A arm -T ramdisk -C gzip -d ramdisk.image.gz uramdisk.image.gz
输出:
Image Name:
Created: Tue Jul 19 17:32:31 2016
Image Type: ARM Linux RAMDisk Image (gzip compressed)
Data Size: 5310073 Bytes = 5185.62 kB = 5.06 MB
Load Address: 00000000
Entry Point: 00000000
- Xilinx Kintex UltraScale 一半尺寸的 PCI Express 平台 (HTG-K816)(06-15)
- Xilinx全新参考设计提供业界首个单芯片400G解决方案(02-12)
- Xilinx用于工业自动化的机器视觉解决方案(11-30)
- Xilinx多协议机器视觉摄像机参考设计(12-01)
- 机器视觉技术原理解析及解决方案集锦(02-06)
- 机器视觉在汽车电子方向的应用解决方案(02-13)