1 SD_SD启动

在真正的工程应用中我们使用的都是QSPI_EMMC的启动方式,因为SD_SD这种启动方式需要SD卡与数字板一直保持连接,所有在恶劣使用场景下稳定性不好。在用QSPI_EMMC启动系统前我们需要先制作系统映像使系统通过SD_SD这种方式启动起来。下面介绍用petalinux制作系统映像的步骤。

  • SD_SD启动指的是FPGA配置文件及系统引导文件BOOT.BIN和系统镜像image.ub在SD卡的FAT32分区,linux文件系统在SD卡的EXT4分区。
  • QSPI_EMMC启动指的是用QSPI FLASH存储BOOT.BIN,系统镜像image.ub在EMMC的mmcblk1p1分区(FAT32),linux文件系统在EMMC的mmcblk1p2分区(EXT4)。

1.1 制作SD卡

我们需要先对SD卡进行分区。

  • 将sd卡插入读卡器,插入pc机,将卡格式化
  • 打开MiniTool找到该SD卡,将两个分区卷标分别设为BOOT和rootfs(BOOT分区不要太大,最好小于4G)
  • BOOT分区用来存储之后制作的用来配置FPGA以及引导系统启动的BOOT.bin文件,和系统映像image.ub。rootfs分区用来存储之后制作的linux文件系统
  • BOOT分区文件系统设为FAT32,rootfs分区文件系统设为ext4。
  • 然后将两个分区均设为主分区,点击应用完成分区,SD卡制作完毕。

1.2 用Vivado导出硬件描述文件hdf

HDF( Hardware Definition File)文件对PS的外设,如内存和各种控制器的寄存器地址等进行了描述,通过它我们可以了解ARM处理器的外设配置情况。

  • 在导出hdf之前我们要注意:DDR型号选择正确,SD0、SD1、QSPI Flash接口打开并引脚连接正确。
  • 点击vivado工程界面左上角File → Export → Export Hardware to SDK,勾选比特流。
  • 在本工程的sdk目录下就能看到导出的hdf文件。

1.3 建立petalinux工程,导入hdf并配置

  • 进入petalinux工具目录下,获取root权限,并读取settings.sh脚本配置环境变量:
cd /opt/petalinux
sudo su
source settings.sh

  • 新建工程,其中miboard_0120是工程名,工程名根据芯片型号及启动方式进行修改,如7100_sd_sd
petalinux-create -t project -n miboard_0120 --template zynq

  • 进入创建的工程目录,然后把该工程的hdf文件和bit流文件复制过来,之后导入硬件工程,并配置硬件。在这里最好将终端窗口最大化,否则偶尔会失败。
 cp /mnt/hgfs/ZXJ/035/xillydemo.* . petalinux-config --get-hw-description -p ./

1.3.1 配置SD接口类型

然后会弹出配置窗口,在这里配置系统启动方式,主要的配置如下:

  • SD_SD启动时配置SD接口为SD0,指SD接口为SD卡。
  • EMMC_QSPI启动时配置SD1为EMMC,指SD接口为EMMC。
  • 这里的SD指广义上的SD,EMMC也是SD的一种。
  • 0:表示SD卡 1:表示eMMC

    Subsystem AUTO Hardware SettingsSD/SDIO Settings下配置,
1.3.2 配置支持BOOT.BIN文件大小
  • 在flash Settings设置中,将boot分区的大小设置为0x1400000,大小为20MB,BOOT.BIN文件较大时才设置。
1.3.3 配置BOOT.BIN文件的启动位置

Subsystem AUTO Hardware Settings,Advanced bootable images storage Settings,Boot image settings下配置

  • SD_SD启动时BOOT.BIN文件在SD卡的第一分区,选择sd
  • EMMC_QSPI启动时BOOT.BIN文件在QSPI FLASH中,选择flash
1.3.4 配置linux系统镜像启动位置

Subsystem AUTO Hardware Settings,Advanced bootable images storage Settings,Kernel image settings下配置

  • SD_SD启动时配置内核、设备树(内核和设备树都集成在image.ub映像中)存放在SD卡第一分区,SD卡第一分区对应/dev/mmcblk0p1,选择sd。
  • EMMC_QSPI启动时配置内核、设备树存放在EMMC第一分区,EMMC第一分区对应/dev/mmcblk1p1,也选择sd(广义)!!!
1.3.5 配置文件系统格式和位置
  • Image Packaging Configuration下配置,进入Root filesystem type,配置文件系统格式,选择SD卡,这里不管是SD_SD还是QSPI_EMMC都选择SD卡。

  • SD_SD时,将Device node of SD device设为/dev/mmcblk0p2,表示将文件系统存放于SD卡第二分区
  • QSPI_EMMC时,将Device node of SD device设为/dev/mmcblk1p2,表示将文件系统存放于eMMC第二分区;
1.3.6 配置系统IP地址
  • 在Subsystem AUTO Hardware Settings → Ethernet Settings中,也可以在最终生成的文件系统(编译之后才会生成)的etc/network/interfaces中修改IP地址
  • 都配置完后退出并保存。

1.4 配置uboot支持的启动方式

uboot被合成在BOOT.BIN文件中,它用来启动linux操作系统的镜像或者启动裸机程序。

  • SD_SD时,BOOT.BIN文件在SD第一分区中,uboot从SD/EMMC启动,选择SD/EMMC。
  • QSPI_EMMC时,BOOT.BIN文件在QSPI FLASH中,uboot从FLASH启动,选择QSPI flash。
petalinux-config -c u-boot


1.5 配置rootfs

在工程目录下输入petalinux-config –c rootfs,配置root用户密码

配置界面:



1.6 配置自动登录

参照ug1144-petalinux-tools-reference-guide_2016.3中的Step for Petalinux Auto Login部分操作:

  • 进入建立的petalinux工程目录下,新建apps工程。
  • 进入工程的components/apps/autologin目录下,修改此目录下的autologin.c和Makefile。
petalinux-create -t apps --name autologin --enable
cd your_proj_name/components/apps/autologin
  • 修改autologin.c为: execlp(“login”, “login”, “-f”, “root”, 0);(记住这个0,和设定的密码无关,不要修改里面参数)
  • 修改Makefile为:
#注意$(TARGETINST)**前面是Tab**
install:$(TARGETINST) -d -p 0755 autologin /etc/init.d/autologin$(TARGETINST) -s /etc/init.d/autologin /etc/rc5.d/S99autologin


若前面已将文件系统密码改为1,则SSH登录时用户名为root,密码为1,串口登录则可自动登录,无需输入用户名和密码,即使密码不为root

1.7 配置linux内核

1.7.1 使用xillybus时

输入petalinux-config -c kernel进入内核配置界面。

  • Device Drivers下进入Character devices中,勾选xillybus generic FPGA interface后下面会弹出两个选项,将这两个都勾上即可,之后退出保存。
1.7.2 使用xilinx DMA IP核时
  • Device Drivers下DMA Engine support中勾选Xilinx提供的DMA IP核驱动(Petalinux2017.2默认勾选),如下:

    如果勾选上,系统启动之后可使用dmesg | grep dma命令查看当前内核是支持DMA IP核的驱动的。

1.8 自动加载驱动,运行应用程序

若需要开机自动加载驱动运行应用程序,可在autologin的Makefile中加入驱动和应用程序,也可以直接在工程生成的文件系统中的etc/profile中添加。

  • 使用axidma驱动时:
  • 使用Xillybus驱动时:

1.9 修改platform-auto.h文件

  • 修改platform-auto.h文件,将cp_kernel2ram按照下图修改,这里修改的是内核路径,注意红框部分。
  • QSPI_EMMC启动时,mmc 1对应emmc,故mmc dev 1以及mmc 1指定从emmc拷贝内核镜像。
  • SD_SD启动时,将图中红框内0改为1即可,mmc 0对应SD卡,指定从SD卡拷贝内核镜像。

1.10 修改设备树

1.10.1 使用xillybus时
  • 硬件工程使用xillybus时,进入/opt/petalinux/project_name/subsystems/linux/configs/device-tree,修改pl.dtsi,如下:
1.10.1 使用xilinx DMA时
  • 硬件工程使用xilinx DMA时,,进入/opt/petalinux/project_name/subsystems/linux/configs/device-tree,修改pl.dtsi,如下:

    修改添加部分主要三处:

#添加三个:
linux,phandle = <0x6>;    linux,phandle = <0x7>;  linux,phandle = <0x8>;
phandle = <0x6>;       phandle = <0x7>;           phandle = <0x8>;
#xlnx,device-id 修改为<0x0>至<0x5>
#在amba_pl节点下三个DMA之后再添加一个设备axidma_chrdev@0 {compatible = "xlnx,axidma-chrdev";dmas = <0x6 0x0 0x6 0x1 0x7 0x0 0x7 0x1 0x8 0x0 0x8 0x1>;dma-names = "tx_channel_0", "rx_channel_0", "tx_channel_1", "rx_channel_1", "tx_channel_2", "rx_channel_2";};
  • 下图中,右边是petalinux自动生成的设备树,需要按照左边修改



1.11 编译工程

输入petalinux-build编译工程。

工程编译完成后,会在build/linux/rootfs/targetroot下生成文件系统。若需要修改MAC地址或自动加载驱动和开机自动运行应用程序,可修改文件系统的etc/profile文件。
your_proj_name/images/linux/目录下生成的vmlinux就是未压缩的系统镜像文件,zImage是压缩的系统镜像文件,system.dtb是系统设备树文件,image.ub是将zImage和设备树system.dtb文件合并起来的文件,u-boot.elf是引导系统启动的bootloader二级引导文件,zynq_fsbl.elf是引导系统启动的一级引导文件。

1.12 Petalinux下生成BOOT.BIN文件

编译工程完成后,在your_proj_name/images/linux/下会生成一些启动文件,需用到zynq_fsbl.elf、project_top.bit、u-boot.elf生成BOOT.BIN,再用JTAG烧写到QSPI Flash中。命令的比特流的名字需与image/linux下比特流名字一致。

petalinux-package --boot --fsbl zynq_fsbl.elf --fpga project_top.bit--u-boot u-boot.elf

  • 烧写BOOT.BIN到FLASH
    JTAG烧写器连接板子和PC机,打开板子开关,选择Xilinx Tools → Program Flash,在弹出的窗口中点击Browse找到刚刚生成的BOOT.BIN,点击Program将其烧写到FLASH。可在SDK下面的窗口中看到烧写进度,成功烧写时如下:

  • 至此,我们SD_SD模式下的步骤已经完毕,只需要将文件系统复制到SD卡的rootfs分区,把image.ub和BOOT.BIN复制到BOOT分区即可。然后插上SD卡,将拨码开关调节到SD卡启动模式,我们的数字版就可以起来了。
  • 接下来的步骤对于系统的完整运行是必不可缺的,但是在SD卡模式下我们可以不做,因为SD卡模式下生成的一系列文件只是为了让板子暂时起来,从而可以让我们进行EMMC的配置,工程中真正使用的是QSPI_EMMC的模式。

1.13 添加设备驱动及应用程序

生成文件系统后,在文件系统的/home/root/下添加模块驱动、应用程序和Qt库动态链接

  • 硬件工程使用XilinxDMA时,需加入以下文件:
  • 硬件工程使用xillybus时,需将xillybus_core.ko,xillybus_lite_of.ko,xillybus_of.ko这三个驱动拷贝到root目录下:
  • 在etc/profile在最终生成的文件系统中,添加下列驱动(路径必须和之前添加的三个驱动的路径相同),修改如下:
  • 若需要修改MAC地址,设置静态路由,也可在profile中添加,如下:

1.13 添加应用程序用到的库文件

  • 当前工程的build/linux/rootfs/targetroot/目录是最后在板子上运行的文件系统,在home下新建文件夹,目录需要与虚拟机中Qt库目录一致,把Qt库拷到这里

    拷贝完Qt库之后:

  • Qt库拷贝完成再将/root/下面的libstdc++.so.6.0.21直接重命名为libstdc++.so.6:mv libstdc++.so.6.0.21 libstdc++.so.6

  • 若使用了Gtest,则将libgtest.so拷贝到刚刚生成的Linux文件系统 目录/usr/lib中。

1.14 EMMC配置

  • 先利用SD卡启动系统,SD卡启动后输入ls /dev查看设备,若没有mmcblk1p1和mmcblk1p2,则emmc还未分区。若没有mmcblk1,则表示当前使用的SD卡的硬件工程或启动文件不支持emmc*。
1.14.1 将emmc分区

mmcblk1对应emmc,需要将mmcblk1分为mmcblk1p1和mmcblk1p2两个区。
输入命令fdisk /dev/mmcblk1 进入分区模式为emmc分区。

输入m查看命令介绍,根据提示分区并保存退出
主要用到三个命令:
n :新建分区
p:打印分区列表
w:退出分区命令并保存

新建第一个分区:如果选择默认选项(default)的话,回车即可

同样的步骤新建第二个分区:都选择默认选项即可

输入p可查看分区情况,可看到已经有两个分区:

输入w保存并退出分区命令:

我们可以看到在/dev下面有两个新的分区:

1.14.2 格式化emmc分区
  • 格式化EMMC分区会用到两个工具,mkdosfsmke2fs ,如果没有这两个命令,将这两个命令拷贝到SD卡的/usr/bin中。若没有这两个工具则要自己下载源码并编译。
  • 拷贝内核image.ub文件
    1.mount /dev/mmcblk1p1 /mnt/mmk1p1/dev/mmcblk1p1挂载到某个目录下
    2.cd /mnt/mmk1p1进入挂载的目录
    3.scp zynq@192.168.1.112:~/zhuang/0408/image.ub /mnt/mmk1p1/ scp网络拷贝将虚拟机下的image.ub拷贝到挂载的目录下,密码为1
    4.sync 同步数据
    5.cd / 退出到根目录
    6.umount /dev/mmcblk1p1 卸载eMMC第一分区
  • 拷贝文件系统rootfs
    编译工程之后生成的image/linux/build/linux/rootfs/targetroot/*是最终运行在板子上的文件系统,通过网口拷贝到EMMC第二分区。
    1.将build/linux/rootfs/targetroot/*拷贝至某目录
    2.mount /dev/mmcblk1p2 /mnt/mmk1p2 SD卡启动并挂载eMMC第二分区
    3.cd /mnt/mmk1p2 进入挂载的目录
    4rsync -a --progress zynq@192.168.1.112:~/zhuang/0408/rootfs/* /mnt/mmk1p2/
    5.sync 同步数据
    6.cd / 退出到根目录
    7.umount /dev/mmcblk1p2 卸载eMMC第二分区
    8.拷贝完成之后可在/mnt/mmk1p2/下看到文件系统,若需要修改替换应用程序及模块驱动、修改IP地址、配置开机自启动,均可在相应路径及文件中设置。推荐设置好后再复制过来。
  • 至此QSPI_EMMC模式下的配置已经完毕,将拨码开关调制EMMC模式后重启即可。

2 启动时找不到内核原因

2.1 拷贝完未使用sync命令且并卸载分区

因为用SD卡启动系统,挂载emmc分区,把image.ub拷到emmc分区中之后没有卸载此分区,所以有时候会找不到内核镜像。同时,拷贝完内核镜像之后最好使用sync命令强制让拷贝的文件立刻从内存缓冲区拷贝到emmc硬件里(Linux下拷贝文件会先把文件存放在内存缓冲区再到相应存储器)。

2.2 uboot引导内核参数未正确设置

  • 进入u-boot命令行(启动倒数几秒的时候按空格键进入uboot命令行)
    输入printenv查看打印的参数,确认cp_kernel2ram= mmc dev 1&& mmcinfo && fatload mmc 1 0x10000000 image.ub
    若不是,则需输入以下命令重新配置环境变量:
    setenv cp_kernel2ram 'mmc dev 1 && mmcinfo && fatload mmc 1 0x10000000 image.ub',输入saveenv保存退出。
    再输入printenv查看cp_kernel2ram,确认是否修改正确。
    mmc dev 1:mmcinfo可能默认是SD0,故需手动设置为dev 1,否则可能有如下情况:
  • 若需要修改uboot倒计时,进入uboot命令行
    输入printenv打印环境变量
    输入setenv bootdelay 2设置启动延时为2秒,或其他值
    输入saveenv保存设置
    输入boot启动内核和文件系统

用petalinux工具制作linux系统启动映像相关推荐

  1. 原来安装系统如此简单!强烈推荐这样制作Linux系统启动u盘(收藏干货)

    ​                               Linux系统启动盘制作教程 "不要问自己收获了多少果实,而是要问自己今天播种了多少种子."--罗伯特·路易斯·斯蒂 ...

  2. Linux系统制作Ubuntu启动U盘,用UNetbootin工具制作Ubuntu系统启动U盘图文步骤

    制作Ubuntu系统启动U盘,可以用软碟通UltraISO,也能用UNetbootin这个软件. UNetbootin的好处是有windows客户端,也有Linux的客户端,也就是说可以很方便的在Li ...

  3. linux系统系统盘制作工具,轻松制作Linux系统启动盘的四种方法

    Linux的启动软盘有boot盘和boot/root盘之分.所谓的boot盘只能用来启动已经安装在硬盘上的Linux系统,而boot/root盘本身就是一个迷你Linux系统. Linux启动软盘是系 ...

  4. petalinux编译制作linux系统

    0.设置petalinux环境变量 在 Ubuntu 系统中需要先设置 petalinux 工作环境,也就是对 petalinux 工作环境进行初始化,在终端输入如下命令即可: source /opt ...

  5. linux系统下制作启动u盘,制作Linux系统启动盘的四种简便方法

    Linux的启动软盘有boot盘和boot/root盘之分,所谓的boot盘只能用来启动已经安装在硬盘上的Linux系统,而boot/root盘本身就是一个迷你Linux系统.Linux启动软盘是系统 ...

  6. linux系统启动盘怎么制作工具,windows系统制作linux启动盘工具介绍

    Linux发行版排行榜: http://iso.linuxquestions.org/ http://distrowatch.com/dwres.php?resource=major&lang ...

  7. 嵌入式linux ext4映像制作工具说明 real210_v62

    工具下载的地址为:http://download.csdn.net/detail/u010406724/6996813 有资源分,没分了,见谅. 有两个工具,其中make_ext4fs是制作工具,si ...

  8. Linux系统启动流程(4)制作自定义linux之一

    Linux系统启动流程(4)制作自定义linux之一 平时使用的服务器类型的linux系统一般都会装载各种软件与服务,而在某些情况下,并不能一直直接使用公司管理的系统,一是可能会出现故障,二是在处理一 ...

  9. grub2引导linux内核,一种基于grub2的linux系统启动bootloader的制作方法与流程

    技术领域 本发明涉及服务器应用技术领域,具体涉及一种基于grub2的linux系统启动bootloader的制作方法. 背景技术: 当前linux系统的内核版本已经升级至4.0以上,最新的linux系 ...

最新文章

  1. php curl 内容采集
  2. leetCode刷题--两数相加
  3. mysql的initial_mysql Lost connection to MySQL server at ‘reading initial communication packet
  4. 微信公众号 模版消息 跳转到小程序报错{ errcode: 40013, errmsg: 'invalid appid hint: [cC6RwA09011295]' }
  5. mysql 5.1 1067,mysql服务1067错误多种解决方案汇总
  6. 建武28a对讲机最大距离_小米对讲机再出新品:不但价格低,还能一键写频
  7. 重置SQLSERVER表的自增列,让自增列重新计数【转】
  8. php7.2 加密,php 7.2 aes 128 ECB 加密
  9. 2022程序猿生产力软件推荐
  10. stm32看门狗定时器记录
  11. android安装包资源提取,APK资源提取器
  12. Android连接逍遥模拟器
  13. 午芯高科WXP380气压传感器
  14. js 验证码错误,输入框获得焦点并清除内容
  15. 开发者百度地图的使用,做一个小demo,ak秘钥,
  16. Python安装Pillow时出现The headers or library files could not be found for zlib/jpeg错误
  17. 主要电商模式 B2B C2C B2C C2B O2O F2C B2B2C
  18. css 字体 图片 动画
  19. 年薪50万+的90后程序员都经历了什么?
  20. vue axios在开发中遇到的问题

热门文章

  1. 移动端苹果手机的input框type= number只是唤起数字键盘 不能阻止输入汉字和字母
  2. 内含JAVA简单概括和JAVA所需安装的软件和详细教程,想学习JAVA无从下手,这篇文章带你迈出第一步
  3. 运行应用,Could not open: device
  4. android 解析、生成二维码
  5. 图片像素大小怎么调整?图片改大小尺寸的具体方法
  6. android 华为裁剪全图,华为手机头像上传裁剪操作 报错
  7. 苹果删除的短信怎么恢复?两个用过都说好的操作技巧
  8. AI——四(填充效果和混合效果)
  9. Cdiscount API产品上架 SubmitProductPackage
  10. 5、孟子·万章上 孟子·万章下