- 博客(8)
- 收藏
- 关注
原创 petalinux2021 flash启动读取image时间过长问题
linux开机进行到读取iamges时间过长,这显然不正常。把tx总线宽度改成4就好了。
2025-12-31 11:40:48
189
原创 petalinux2021 rootfs模式为initramfs 无法开机问题
文档中写道默认情况下选择initramfs 的Image name为 petalinux-initramfs-image是需要根文件系统挂载在ext4的存储区域里,但是我选择initramfs就是为了不用ext4存储区域。所以需要将Image name改成能够在initramfs里独立运行的配方。比如petalinux-image-minimal就可以正常开机了。查看image.ub发现只有十几兆大小,rootfs.cpio.gz应该是没有集成到里面去。在petalinux2021.1官方文档中寻找答案。
2025-12-24 11:37:29
153
原创 ZYNQMPlinux系统mtd设备初始化报错问题
也就是识别到了mtd设备,但查看/dev发现只有一个mtd0。查资料发现,老版本例如内核4.n会把petalinux自动生成的partition节点识别成ofpart。但是linux内核5.n以后就不能这么识别了,必须要告诉内核这些partition的类型,所以在所有的partition外面套一个父节点写上compatible = "fixed-partitions";总结起来就是,在system-user.dtsi文件里面加入qspi设备树的补充部分,开机后就能看到3个mtd设备了。
2025-11-28 15:35:48
213
原创 Linux开机卡在PCIe初始化
2.在PS的设备树里检查是否有参考时钟。比如这个路径下components/plnx_workspace/device-tree/device-tree/pl.dtsi 检查里面是否有250M的clk。如果没有,很可能是PL生成的文件里没有包含该时钟信息,导致无法开机。卡在这个位置最主要的可能就是时钟问题,我用的是250M时钟,ZYNQ的PL初始化时没有检测到pcierefclk所以卡在这个位置不动了。1.PL工程的时钟,检查是否在constraints里面声明了pcie时钟。
2025-08-20 16:34:00
287
原创 ZYNQLinux开机卡在SD卡初始化、设备挂载位置
但是,linux开机时mmc驱动还是会去检测wp的gpio引脚电平,如果你没在设备树中将它disable掉。这样就导致没有这个引脚,那么驱动尝试去读引脚电平时很可能返回高(悬空),并将设备误认为是只读,导致开机失败。究其原因是因为,我的PS端SD卡配置,没有勾选wp,硬件电路也没有设计相关引脚,因此SD卡插入电路板上肯定是可读可写的状态。本质上的原因是开机过程尝试把SD卡内的根文件系统挂载到系统根文件系统目录下,结果返回error cannot open。再来看写,尝试向SD卡写数据,也没问题。
2025-07-02 10:47:19
445
原创 petalinux交叉编译快速编译方法,亲测百分百好用
至于编译应用程序,我习惯在制作的内核根目录选项里加入gcc,这样把.c文件拷贝到开发板就可以直接gcc编译,不用交叉编译,也很方便。你是否苦恼于使用petalinux编译驱动和应用程序时每次都要build -c等待好久,试试我的交叉编译方法,每次都是秒完成!至此makefile写完,在目录下make就可以秒生成.ko文件,再也不用petalinux build -c等着了。首先按照官方文件ug1144 builk SDK,建在默认路径下就行。其中KDIR就是你build生成内核镜像过程中编译好的内核。
2025-01-23 15:35:48
605
原创 ZYNQLinux开机卡在pcie初始化解决方案
其实vivado上pcie的ip已经很成熟,配置参数上的不同不会产生太大影响,那么只能是引脚和时钟的问题,引脚已经反复看过,时钟在ip配置里也没问题,后来是网上查找资料发现,综合里面的constraints wizard会提示一些警告。这里我就不具体展示了。排除了各种可能的故障原因:比如PCIe Block Location设置,GTH口选择,引脚也反复检查,都没有改善,还会让问题的现象有所变化,如下图所示,卡在nvme驱动尝试将盘挂载在系统这一步。列出一个据我看不太常见的问题,只发生在我自己身上。
2025-01-23 11:19:22
1533
原创 DMA实现自定义块设备的传输函数
映射这一段我发现存在缓存一致性问题,DMA_TO_DEVICE方向的数据是一致的,DMA_FROM_DEVICE的数据,dma能够正确搬运到dma_addr地址上,但与之对应的bv虚拟地址不一致,需要加一步dma_sync_single_for_cpu使缓存同步。这里缓存同步的方式有很多种,我是实际测试发现dma_sync_single_for_cpu能使dma_map_bvec映射的地址同步,dma_sync_sg_for_cpu就不行。后面对传输的操作就根据自己需求定义就可以,我这里就先讲个框架。
2025-01-22 15:54:06
753
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅