• 嵌入式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

  • 相关阅读:
    oracle 中和mysql的group_concat有同样作用的写法
    sql find_in_set在oracle下的解决方案
    Django项目部署:使用uwsgi和nginx的方式
    virtualenvwrapper.sh报错: There was a problem running the initialization hooks.解决
    html中footer如何一直保持在页底
    mysqldump导出备份数据库报Table ‘performance_schema.session_variables‘ doesn‘t exist
    django-ckeditor添加代码功能(codesnippet)
    Django_外键查询和反查询
    python面向对象编程(OOP)
    Django模型中字段属性choice的使用
  • 原文地址:https://www.cnblogs.com/zc110747/p/12983121.html
Copyright © 2020-2023  润新知