调试at91-sama5d27遇到的一些问题(3)

前两篇请跳转到
1:https://blog.csdn.net/qq_44766222/article/details/124164895
2:https://blog.csdn.net/qq_44766222/article/details/124172280

项目场景:

基于sama5d27的嵌入式产品的软件开发,下面将描述一些我调试中遇到的一些问题,这个项目属于是我第一个linux应用项目,调试中遇到了一些小白性的问题,整体的调试思路为:分析源码-修改源码-编译源码-运行-分析源码。

编译文件系统不能执行patchelf

查找原因是本机的库文件链接出了,主要是 libstdc++.so.6这个库问题,找到库文件存放的地方,执行 sudo ln -s libstdc++.so.6.0.24 libstdc++.so.6链接库文件后运行正确。

编译工具问题

官方提供的buildroot默认使用网络下载的编译器,但是由于网络问题下载不成功,编译不通过,改用我们自己安装的交叉编译器,再修改menuconfig配置,红色框内为本地交叉编译器的路径。
在这里插入图片描述

文件下载工具

由于设计的嵌入式板卡不带有网络通讯功能,故不能使用网口传输数据,仅有一个串口与外界通讯,我们可以利用lrz协议通过串口传输文件,例如传输库文件、应用程序、调试数据等,在编译文件系统的时候使能:br2_package_lrzsz=y.
在这里插入图片描述

根文件系统制作

我们使用的是spiflash,需要将buildroot编译生成的文件系统制作成.jffs2格式的根文件系统,buildroot生成的文件在rootfs文件夹下面,下面我们将通过以下几步实现根文件系统的生成;

sudo chown i rootfs/ -R
sudo /usr/sbin/mkfs.jffs2 -d /home/i/work/developmentboard/fs-jffs2/rootfs -s 0x1000 -e 0x10000 -p 0xA00000 -o rootfs.jffs2 
sudo chown i rootfs.jffs2
chmod 777 rootfs.jffs2

使用mkfs.jffs2 -h指令可以查看各个参数的含义,这里需要注意的是-e和-s参数,需要根据芯片手册来配置,在uboot启动的时候也可以看到具体的数值。

系统启动问题

制作好文件系统后,下载到板卡,发现每次启动后程序会停止在Initializing random number generator… done.这句话,不能进入系统,而接上仿真器启动,系统却能够正常进入,最后阅读内核源码,发现程序只要一运行sleep函数,程序就会停止。最终定位是系统时钟的问题,系统在运行sleep函数后,会将系统时钟切换到慢时钟工作,我们最开始在bootstrap里面配置的慢时钟使用的是外部时钟,而我们板卡实际没有接外部时钟,只能选择系统内部时钟,接仿真器的时候会提供一个外部的32k时钟,所以接仿真器系统运行正确,修改bootstrap后系统能够正常启动。

应用程序串口使用

调试程序时,串口无法发送0x030x13等指令,原因是串口初始化的时候默认配置了流接收,对特殊字符进行了处理,按照以下配置后,程序运行正确:

options.c_iflag &= ~(BRKINT |ICRNL|INPCK|ISTRIP|IXON); 
options.c_oflag &= ~OPOST;
options.c_cflag |= CLOCAL|CREAD; 
options.c_lflag &= ~(ICANON|ECHO|ECHOE|ISIG);

大家有问题可以相互讨论,我也是小白,微信 yucaohua001

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值