调试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
總結
以上是生活随笔為你收集整理的调试at91-sama5d27遇到的一些问题(3)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NPOI Word 多级标题结构设置
- 下一篇: EXCEL 求解线性规划问题