linux 编译调试
文章平均质量分 90
li_wen01
liwen01
展开
-
嵌入式程序大小控制方法介绍
嵌入式设备flash空间有限,为节省成本,一般程序的存储空间都会非常小,这就需要我们将程序中不需要的内容清除,或者是直接对程序进行压缩处理,以达到减小执行程序大小的目的。控制嵌入式程序大小有下面几种方法有: 1.使用strip命令清除符号表信息 2.使用objcopy生成特定的格式文件 3.使用tar zip等命令对程序进行压缩处理在实际应用中发现下面两个问题点: 1.为什么静态库使用strip之后不能再被成功链接? 2.为什么有些时候objcopy生成的bin...............原创 2020-12-10 18:16:55 · 1861 阅读 · 1 评论 -
udev udevadm介绍及linux设备重命名和自动挂载应用实例分析
(一)UDEV介绍 udev在维基百科中的定义是:udev (userspace /dev) is a device manager for the Linux kernel. As the successor of devfsd and hotplug, udev primarily manages device nodes in the /dev directory. At the ...原创 2019-04-21 18:36:39 · 25039 阅读 · 1 评论 -
一种Linux中快速定位段错误的方法
在做嵌入式Linux开发的时候,程序很容易出现段错误。段错误一般是内存操作指针出错或是内存溢出等问题,有的时候系统会有一点错误提示,但有的时候就直接提示个Segmentation fault (core dumped) 。如果程序是单线程,那很好处理,编译的时候添加参数-g ,直接使用gdb 单步调试就可以直接定位到问题点在哪了。但是对于多线程,情况就不一样了。多线程进行单步调试不好处理,并且时原创 2018-01-02 18:46:24 · 6673 阅读 · 1 评论 -
Ubuntu 16.04 安装ARM交叉编译工具
我安装的ARM 编译器是:toolchain_gnueabi-4.4.0_ARMv5TE,其他的编译器也是一样的安装方式,可以参考1)安装交叉编译器----------------------$>tar zxvf toolchain_gnueabi-4.4.0_ARMv5TE.tgz -C /usr/$>cd /usr/$>ls可以看到一个子目录toolchain_g...原创 2018-04-24 11:13:19 · 5577 阅读 · 1 评论 -
Linux 日志输出控制
在嵌入式Linux设备中,系统资源比较有限,在产品开发时我们会打印很多的日志信息方便工程调试和问题定位。但是在产品发布的时候,为了节省系统资源,那些调试信息或是一些不总要的信息就不需要再记入到日志当中,所以我们需要设置相应的日志等级。 Linux内核调试信息printk函数,它的输出等级在Linux内核中已经帮我们定义好。可以通过命令查看和设置系统日志等级:/ # cat ...原创 2016-11-10 21:45:19 · 6044 阅读 · 0 评论 -
linux 在线调试摄像头驱动
在使用嵌入式linux设备做点到点之间的图像传输,比如linux平台采集摄像头数据,然后通过wifi或是蓝牙等设备将图像数据发送到手机端,最后使用手机显示出图像。图像处理和图像传输是在应用层完成,在应用层写代码和调试代码都是比较容易的。但是如果需要调试摄像头驱动的一些参数,涉及到驱动层的东西就会比较的麻烦。在我使用的这个平台,假如我要调试摄像头驱动gc0308的寄存器,它需要每改一次寄存器...原创 2018-04-24 11:07:36 · 7801 阅读 · 1 评论 -
C语言编译过程详解
前言C语言程序从源代码到二进制行程序都经历了那些过程?本文以Linux下C语言的编译过程为例,讲解C语言程序的编译过程。编写hello world C程序:// hello.c#include <stdio.h>int main(){ printf("hello world!\n");}编译过程只需:$ gcc hello.c # 编译$ ./...转载 2019-03-07 23:02:56 · 472 阅读 · 1 评论 -
linux 动态库 静态库原理分析
1.什么是库 在windows平台和linux平台下都大量存在着库。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的本质不同,因此二者库的二进制是不兼容的。本文仅限于介绍linux下的库。2.库的种类 linux下的库有两种:静态库和共享库(动态库)。动态通常用.so为后缀,静态用.a为后缀。例如:libhello......原创 2019-04-02 22:32:31 · 2121 阅读 · 1 评论 -
Linux内存管理内存映射以及通过反汇编定位内存错误问题
提到C语言,我们知道C语言和其他高级语言的最大的区别就是C语言是要操作内存的!我们需要知道——变量,其实是内存地址的一个抽像名字罢了。在静态编译的程序中,所有的变量名都会在编译时被转成内存地址。机器是不知道我们取的名字的,只知道地址。内存的使用时程序设计中需要考虑的重要因素之一,这不仅由于系统内存是有限的(尤其在嵌入式系统中),而且内存分配也会直接影响到程序的效率。因此,.........转载 2019-03-11 18:00:40 · 4213 阅读 · 1 评论 -
【Linux程序移植】在./configure的时候将编译参数传入,将默认GCC编译器改成交叉编译arm-linux-gcc
如何在configure时,将编译参数传入,改变默认的编译器gcc成arm-linux-gcc【问题】想要用交叉编译工具arm-linux-gcc去编译lrzsz,但是在./configure的时候,无法用–host=arm-linux或–build=arm-linux或–target=arm-linux等传入此编译器参数。【解决过程】按照INSTALL中的介绍,也是常用的方法,...转载 2018-09-11 19:09:02 · 2350 阅读 · 1 评论