嵌入式Linux問題總結(一) Ubuntu常用命令和編譯問題解決方法


  在進行嵌入式Linux的學習筆記的學習過程中,開發過程也遇到很多Ubuntu系統,編譯,Makefile語法,設備樹,網絡以及線程,進程等細節知識,這部分知識十分零散,卻是應用開發的基礎,如果將其放在學習筆記系列中,又干擾整個開發的節奏,所以就在上個系列的基礎上,新增加關於嵌入式Linux問題的總結,這里面記錄的可能是常用命令,編譯報錯的解決方法,特殊的bash語法知識等,如果后面再遇到問題,解決后,也會持續維護更新這篇文章,算是個小的問題資料庫了。

1.常用資料網絡路徑

  gcc下載官方路徑:      http://ftp.gnu.org/gnu/gcc

  gcc下載鏡像路徑:      http://mirror.hust.edu.cn/gnu/

     淘寶源的git文件:      https://npm.taobao.org/mirrors/git-for-windows/

  綜合的開源QT基礎DEMO:   https://github.com/feiyangqingyun/QWidgetDemo

  在線工具,資料:        http://tool.oschina.net/

  算法學習:         https://leetcode-cn.com/

  windows國內備份站點:       https://msdn.itellyou.cn/

  清華Ubuntu鏡像站路徑:  https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu/

   代碼編譯結果直接查看:   https://godbolt.org/

2.常用Ubuntu指令匯總

sudo su 獲取root權限 clear  清除當前界面 ifconfig 網絡相關執行
ifconfig eth0 up 啟動網口0
top     查看當前系統的各程序的占有率
mkdir -p filepath 創建路徑,可遞歸創建 apt-get install filename 安裝指定文件 alias ll='ls -alF' 列出當前文件夾內狀態 ls /dev/ 查詢當前的設備 ls /dev/sd* 查詢當前的是的sd卡設備 ps -a | grep sshd 查詢當前執行的sshd后台應用
ps -ef            查詢當前執行的所有后台應用
kill -9 xxx 關閉指定ID的后台應用 tar -xvf xxx 解壓到當前文件夾,后面可指定目錄 cat /proc/devices 查詢當前的設備總線 scp -r file_name system_usr@ip_addr:/filepath 例如: scp -r uart_proto root@192.168.1.251:/usr/app 通過ssh快速上傳文件到指定地址 insmod/rmmod/modprobe/lsmod 加載/刪除/帶關聯加載/顯示內核模塊 modinfo xx.ko 列出模塊的信息 tar -vcjf xxx.tar.bz2 * 將當前路徑下的文件打包 mknode /dev/... c main_id slave_id

例如: mknod /dev/led c 1 0 根據主從設備號創建設備節點 ls /proc/slabinfo 查看內存占用情況

 

3. Linux下掛載SD卡方法

使用指令ls /dev/mmc* 查看當前的sd卡分區,如我的sd卡為/dev/mmblk0p1~4

使用指令

mount -t vfat /dev/mmcblk0p1  /mnt/sdb1 將SD卡掛載到指定路徑下,並可以通過指令

umount /mnt/sdb1                        取消u盤的掛載

 

錯誤問題解決:

mount: mounting /dev/mmcblk0p1 on /mnt/sdb2 failed: No such file or directory

此時如果mnt路徑下沒有該目錄,會掛載失敗

mount -n -o remount,rw /   解鎖只讀權限,

mkdir /mnt/sdb1               創建掛載路徑

此后可通過

ls /mnt/sdb1  查看掛載的U盤的數據

 

4. 編譯和命令行錯誤問題解決

1) 嵌入式平台斷電或者硬件復位保存文件會無效

原因: 這是因為嵌入式文件的保存分為程序讀寫---->緩沖區----->內核------>磁盤,直接硬件重啟可能會導致來不及寫入。

解決指令: 使用reboot指令進行復位,盡量不要使用硬件復位。

 

2)Makefile編譯出錯

內核編譯報如下顯示找不到Makefile

make[2]: *** No rule to make target `/usr/kernel/hello/Makefile'.  Stop.

make[1]: *** [_module_/usr/kernel/hello] Error 2

make[1]: Leaving directory `/usr/src/linux-headers-3.5.0-23-generic'

解決辦法:Makefile必須大寫,否則找不到文件

 

/bin/sh: 1: lzop: not found問題

解決方案是:

安裝lzop,執行下面語句

sudo apt-get install lzop

 

Makefile:5: *** missing separator (did you mean TAB instead of 8 spaces?).  Stop.

解決辦法:make命令需要以Tab對齊,直接復制可能是空格對齊,使用vim指令修改帶make行的語句,用tab對齊。

 

curses.h: No such file or directory

解決辦法:sudo apt-get install libncurses5-dev

 

bc:command no found

解決辦法:sudo apt-get install bc

 

3)普通模式和root模式命令狀態執行不一致

原因:管理員模式和普通模式對應的PATH不一致,在普通模式下能找到指令,管理員模式下無法找到。

解決辦法:

在普通模式下PATH對應路徑為/etc/profile中的export PATH="xxx:添加路徑", 

在管理員模式下PATH對應路徑為/etc/environment中的PATH="xxx:添加路徑"

修改后可用source /etc/environment來更新PATH,有問題可及時修改。

另外,可通過echo $PATH查看當前的全局路徑。

 

4)內核模塊加載錯誤

insmod: error inserting 'memdev.ko': -1 Device or resource busy 

原因:驅動的設備號已經被占用

解決辦法:如果占用設備號的設備同樣為獨立於內核的模塊,可用rmmod刪除后,在添加,如果為內核集成的模塊,則需要重新編譯內核模塊或Linux模塊,避免被占用。

 

5)使用SSH指令傳輸數據出錯

scp -r uart_proto root@192.168.1.251:/usr/app報如下錯誤

no matching key exchange method found. Their offer: diffie-hellman-group1-sha1

原因:ssh客戶端使用的配置為ssh_config, ssh服務器端使用配置為sshd_config

vim /etc/ssh/ssh_config(路徑可能根據實際情況改變,我的系統是該路徑)

將ssh服務器下sshd_config中的KexAlgorithms, Ciphers, MACs添加到該文件末尾即可。

 

6)編譯node顯示

'print' no acceptable C compiler found

如果gcc, g++在全局下都能正常使用,那么原因是默認系統python的版本使用的是python3,而不是python2,可通過

cd /usr/bin

rm -rf python

ln -s /usr/bin/python2.7 /usr/bin/python

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM