在进行嵌入式Linux的学习笔记的学习过程中,开发过程也遇到很多Ubuntu系统,编译,Makefile语法,设备树,网络以及线程,进程等细节知识,这部分知识十分零散,却是应用开发的基础,如果将其放在学习笔记系列中,又干扰整个开发的节奏,所以就在上个系列的基础上,新增加关于嵌入式Linux问题的总结,这里面记录的可能是常用命令,编译报错的解决方法,特殊的bash语法知识等,如果后面再遇到问题,解决后,也会持续维护更新这篇文章,算是个小的问题资料库了。
1.常用资料网络路径
2.常用Ubuntu指令汇总
sudo su获取root权限clear清除当前界面ifconfig网络相关执行
ifconfig eth0 up 启动网口0
top 查看当前系统的各程序的占有率mkdir -p filepath 创建路径,可递归创建
apt-get installfilename 安装指定文件
alias ll=‘ls -alF‘列出当前文件夹内状态ls /dev/查询当前的设备ls /dev/sd*查询当前的是的sd卡设备ps -a | grepsshd 查询当前执行的sshd后台应用
ps -ef 查询当前执行的所有后台应用kill -9xxx 关闭指定ID的后台应用tar -xvf xxx 解压到当前文件夹,后面可指定目录cat /proc/devices 查询当前的设备总线scp -r file_name [email protected]_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 [email protected]:/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
原文:https://www.cnblogs.com/zc110747/p/12983121.html