![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux学习
文章平均质量分 78
sjwangjinbao
这个作者很懒,什么都没留下…
展开
-
Linux内存那些事 -- OOM
1、介绍OOM killer(Out Of Memory killer)是Linux内核的一个机制,该机制会在内存分配失败的时候被触发,然后根据配置来决定是下一步策略:或者引起系统panic而重启,或者将一些bad的进程kill掉。2、OOM相关参数OOM的参数可以通过应用层来进行设置,这些接口一般都在/proc/sys/vm下。参数 说明 可选值 可选值说明 panic_on_oom 用来控制当内存不足时是否启用OOM 0 内存不足时,启动 OOM原创 2021-08-08 16:34:55 · 725 阅读 · 0 评论 -
Linux内存那些事 -- VSS、RSS、PSS、USS
1、背景如果一个进程内存消耗太多,那么会导致整个系统内存紧张,而出现OOM等。所以我们经常会需要统计整个系统各个进程内存消耗的情况。一般对一个进程的内存的表示有4种方式:VSS、RSS、PSS、USS,那么什么时候应该用哪种方式统计呢?我们需要先了解他们的差别:VSS- Virtual Set Size 虚拟耗用内存(包含共享库占用的全部内存,以及分配但未使用内存)RSS- Resident Set Size 实际使用物理内存(包含共享库占用的全部内存)PSS- Proportional S原创 2021-08-07 09:42:12 · 1942 阅读 · 0 评论 -
GCC详解-Binutils工具之c++filt
1、介绍C++的name mangling遵循一定的规则,因此是可逆的,即通过符号还原出原来的函数定义。c++filt就是这样的一个工具。2、例子直接上例子。我们写一个C++程序:#include <stdio.h>class A{public: int a_func(int a, int b) { return a+b; } int a_func(int a)原创 2021-07-25 19:49:54 · 819 阅读 · 0 评论 -
GCC详解-gcc之-Wl选项
1、介绍-Wl后面的东西是作为参数传递给链接器ld的。比如:gcc -Wl,aaa,bbb,ccc最后会被解释为:ld aaa bbb ccc2、-Wl,-Map=xxx.txt 生成map文件如下会生成map文件mymap.txt。gcc -Wl,-Map=mymap.txt -g main.c -o main3、-Wl,-Bstatic 和 -Wl,-Bdynamic 指定链接动态库或者静态库-Wl,-Bstatic -laaa -lbbb -lccc.原创 2021-07-25 18:34:28 · 10634 阅读 · 1 评论 -
GCC详解-Binutils工具之addr2line
1、介绍addr2line是一个可以将指令的地址和可执行映像转换为文件名、函数名和源代码行数的工具。可以通过帮助看下其使用情况:$ addr2line -hUsage: addr2line [option(s)] [addr(s)]Convert addresses into line number/file name pairs.If no addresses are specified on the command line, they will be read from std..原创 2021-07-25 18:07:14 · 1034 阅读 · 0 评论 -
GCC详解-Binutils工具之objdump
1、介绍objdump是用查看目标文件或者可执行的目标文件的构成的工具。2、参数 选项 详细选项 描述 -a --archive-headers 显示档案库的成员信息,类似 ls -l 将 lib*.a 的信息列出。 -b bfdname --target=bfdname 指定目标码格式。这不是必须的,objdump 能原创 2021-07-25 17:32:20 · 583 阅读 · 0 评论 -
GCC详解-Binutils工具之nm
1、介绍nm用来列出目标文件中的符号,用以定位和分析执行程序和目标文件中的符号信息和它的属性。它可以和readelf、objdump、addr2line工具配合使用。1.1 参数总结 选项 描述 -A 同选项 --print-file-name -a 同选项 --debug-syms -B 同选项 --format=bsd。这是默认设置原创 2021-07-25 11:42:17 · 1269 阅读 · 0 评论 -
GCC详解-Binutils工具之strip
1、介绍strip经常用来去除目标文件中的一些符号表、调试符号表信息,以减小静态库、动态库和程序的大小。其基本用法:strip xxx或者strip xxx -o yyy2、优缺点优点:strip后占空间小缺点:strip后不方便调试,addr2line等不能使用针对缺点的应对策略:strip前的库用来调试, strip后的库用来实际发布, 他们两者有对应关系。 一旦发布的strip后的库出了问题, 就可以找对应的未strip的库来定位。3、适用范围3.1 动态库原创 2021-07-25 09:55:34 · 2628 阅读 · 0 评论 -
GCC详解-Binutils工具之strings
1、介绍strings 工具在对象文件或二进制文件中查找可打印的字符串。这里的字符串是指:4个或更多可打印字符的任意序列,以换行符或空字符结束。当然,这里的4可以通过-n指定和修改。2、常用用途我们知道了strings的用法后,那么我们什么情况下才会用它呢?其实这么几个地方可能会经常用到:2.1 快速确认版本比如程序里有个版本定义:char version[] = "aaa_xxx_v0.1",那么可以通过strings xxx.binary | grep version原创 2021-07-24 23:08:47 · 478 阅读 · 0 评论 -
GCC详解-Binutils工具之size
1、size工具介绍size工具会列出程序文件中各段的大小。我们可以查看帮忙:$ size --helpUsage: size [option(s)] [file(s)]Displays the sizes of sections inside binary filesIf no input file(s) are specified, a.out is assumedThe options are: -A|-B --format={sysv|berkeley} Sel...原创 2021-07-24 22:39:57 · 982 阅读 · 0 评论 -
GCC详解-gcc之创建动态库静态库及其使用
1、动态库1.1 创建动态库创建库文件的头文件mylib.h,内容为:int myfun(int a);创建库文件的源文件mylib.c,内容为:#include <stdio.h>#include "mylib.h"int myfun(int a){ return a;}使用如下命令生成我们的共享库libmy.so:gcc -fPIC -shared mylib.c -o libmy.so1.2 使用动态库创建main.c,...原创 2021-07-24 22:23:05 · 948 阅读 · 0 评论 -
GCC详解-Binutils工具之readelf
1、介绍readelf从ELF 格式的目标文件显示信息。readelf和objdump提供的功能类似,但是它显示的信息更为具体,并且它不依赖BFD库(BFD库是一个GNU项目,它的目标就是希望通过一种统一的接口来处理不同的目标文件)2、ELF格式的文件ELF(Executable and Linking Format)是一个定义了目标文件内部信息如何组成和组织的文件格式。内核会根据这些信息加载可执行文件,内核根据这些信息可以知道从文件哪里获取代码,从哪里获取初始化数据,在哪里应该加载共享库,原创 2021-07-24 17:45:14 · 1022 阅读 · 0 评论 -
GCC详解-gcc
1、背景1.1 gcc介绍如上一篇介绍的,gcc执行编译程序和连接程序以产生需要的输出;而g++是gcc 的一个版木,默认语言设置为 C++,而且在连接的时候自动包含标准 C++ 库。所以,简单来讲,我们可以使用gcc将代码,编译成可以执行的程序。以C/C++为例,我们可以总结下gcc能做如下的事情:输出预处理后的C/C++源程序(展开头文件和替换宏) 输出C/C++源程序的汇编代码 输出二进制目标文件 生成静态库 生成可执行程序 转换文件格式1.2 gcc编译过程如图所示,原创 2021-07-24 10:41:22 · 2422 阅读 · 0 评论 -
GCC详解-总览
1、GCC是什么早期 GCC 的全拼为 GNU C Compiler,即 GUN 计划诞生的 C 语言编译器,显然最初 GCC 的定位确实只用于编译 C 语言。但经过这些年不断的迭代,GCC 的功能得到了很大的扩展,它不仅可以用来编译 C 语言程序,还可以处理 C++、Go、Objective -C 等多种编译语言编写的程序。与此同时,由于之前的 GNU C Compiler 已经无法完美诠释 GCC 的含义,所以其英文全称被重新定义为 GNU Compiler Collection,即 G原创 2021-07-18 08:08:19 · 3705 阅读 · 0 评论 -
POSIX介绍
1、POSIX简单介绍POSIX(Portable OperatingSystem Interface)标准定义了"POSIX兼容"的操作系统所必须提供的服务。是为了统一UNIX-like 的OS对外的接口,方便OS之上的应用在各种OS上移植运行,而产生的一套标准OS API。glibc 就是是完全按照POSIX 的标准制作的。2、PSE51EEE 1003.13是针对嵌入式领域制定的标准,根据范围的大小又分为4个不同的Profile,PSE51, PSE52, PSE53和PSE54。原创 2021-07-12 21:49:43 · 1554 阅读 · 0 评论 -
glibc所包含的各个库
1、glibc所包含的各个库介绍废话少说,直接介绍glibc包含了哪些库: Library component Content Inclusion guidelines ld (This library component is not itself a library. Instead, ld.so is an executable invoked by the ELF binary format loader to l原创 2021-07-12 21:20:28 · 2052 阅读 · 0 评论 -
C标准、C标准库、C++标准、C++标准库
1、C标准C标准主要有三个版本:C89、C99、C11,他们之间的关系可以借用这张图来表示:C 标准主要由两部分组成:描述C的语法,和描述C标准库。C标准库定义了一组标准头文件,每个头文件中包含一些相关的函数、变量、类型声明和宏定义。要在一个平台上支持C语言,不仅要实现C编译器,还要实现C标准库,这样的实现才算符合C标准。不符合C标准的实现也是存在的,例如很多单片机的C 语言开发工具中只有C编译器而没有完整的C标准库。2、C标准库2.1 GNU/Linux版本的实现glibc是Lin原创 2021-07-11 19:07:20 · 999 阅读 · 0 评论 -
man命令详解
1、简介 我们都知道,在linux里如果查看帮助的话,可以用man命令。但是如果在man后面加一个数字,可以查看具体的范围。数字 意义 1 用户命令 2 系统调用 3 C语言库函数 4 设备或特殊文件 5 文件格式和规则 6 游戏及其他 7 宏、包及其他杂项 8 系统管理员相关的命令 2、例子...原创 2021-07-10 23:14:34 · 2931 阅读 · 0 评论 -
44b0实验-通过IIC总线读写EEPROM实验
44b0开发板有个EEPROM可以通过IIC总线来进行读写。不过有一点我需要解释下:EEPROM的slave address是怎么确定的呢?查看EEPROM芯片24C08的手册,发现有个Table 3. Device Select Code如下(注意我们使用的芯片M24C08这一行)查看了一下硬件电路图,我发现管脚E2是接地的。所以,我认为,只要保证Device code是1010,E2是0的地址就是其slave adress。所以这里用0xa0.至于表中的A9和A8,我还不明白怎么回事。(这个问题呢,正是原创 2010-08-07 14:44:00 · 1254 阅读 · 1 评论 -
struct device中消失的bus_id的取代方法
<br />编写总线设备驱动程序的时候,发现2.6.33.2内核中的struct device已经没有bus_id的成员了,发现了const char *init_name成员。但是,这个成员是不能直接用来设置和读取设备名的。<br /> <br />对内核操作的方法为dev_name和dev_set_name。内核中的定义是:<br /> <br />1) dev_name<br />static inline const char *dev_name(const struct device *dev)<原创 2010-12-15 11:21:00 · 734 阅读 · 0 评论 -
输入子系统框架程序
这里总结下输入子系统的程序框架。原创 2010-12-17 15:45:00 · 277 阅读 · 0 评论 -
2440学习笔记(2)
<br />也许是周末与几个研究生同学聚会受到了刺激和激励,也许是最近学习所得使我有一种总结和表达的冲动,今天重新拾起我许久没有更新的博客,写点什么,以便更好的前进。<br /> <br />前段时间我主要做了两件事情:<br />1) 仔细听了国嵌视频的Linux应用程序编程,并且边听边实验。<br />2) 将国嵌视频的Arm体系结构和指令部分,好好听了一下,仔细复习了下这部分使我对ARM指令理解更深刻更牢固了。<br /> <br />接下来想做的是:<br />1)在2440上,用H-Jtag、AD原创 2010-11-15 10:11:00 · 265 阅读 · 0 评论 -
Linux红旗7+上海有线通(Cable modem)如何上网
<br />买了个笔记本,自带Linux操作系统。第一天回来搞了半天,也不能上网,真是郁闷啊,在网上搜了半天“有线通”+“Linux”之类的关键词,确实有不少人遇到不能上网的问题,但是就是没有一个有答案的。哎。<br /> <br />后来才知道,有线通其实就属于cable modem。于是继续百度,搜出一堆资料,大体设置如出一辙,似乎都和鸟哥的私房菜中讲的一样;尽管这些设置我之前也都做了,还是不能上网,这里我也贴一遍吧。这里先卖个关子,最后再说我网络怎么搞定的。<br /> <br /> <br />Ca原创 2010-11-26 21:41:00 · 522 阅读 · 0 评论 -
按键驱动--input驱动例子
今天终于将按键驱动改写成input驱动并测试成功了。下面记录下过程吧。 1、建立文件夹InputKey 2、在文件夹InputKey下建立驱动程序inputDev.c。 #include #include #include #include #include #include #include #include #include #inc原创 2010-12-29 22:27:00 · 1771 阅读 · 0 评论 -
按键驱动--platform设备的例子
下面将之前的按键驱动改写为platform设备。 1、建立文件夹Key+Platform 2、在文件夹Key+Platform下建立设备文件keydevice.c。 #include #include #include #include #include #include MODULE_AUTHOR("WJB");MODULE_LICENSE("原创 2010-12-26 17:13:00 · 1246 阅读 · 4 评论 -
misc设备框架
这里总结下简单的misc设备驱动的框架。 1、建立文件夹miscDev 2、在文件夹下建立文件miscDev.c,编写代码如下: #include #include #include #include #include #include #include #include struct file_operations miscDev_f原创 2010-12-15 11:23:00 · 655 阅读 · 0 评论 -
LED驱动--misc设备驱动实例
作为misc设备驱动的一个实例,我选择最简单的LED的驱动。下面简要记录下LED驱动的编写和实验过程。 1、建立文件夹LED 2、在LED文件夹下编写LED驱动程序leds.c #include #include #include #include #include #include #include #include #include原创 2010-12-26 16:22:00 · 731 阅读 · 0 评论 -
字符设备总结
下面是对简单字符设备的总结,以后可以作为模板使用。当然一下代码主要以ldd的例子抄下来的,呵呵。1、单个设备/************************************************************* **原创 2010-12-15 14:42:00 · 335 阅读 · 0 评论 -
总线设备驱动框架程序
这里总结下简单的总线设备驱动的框架程序。 0、建立文件夹busdevdrv1、总线 在文件夹内建立总线文件bus.c,代码如下。#include #include #include #include #include MODULE_AUTHOR("sjwangjinbao");MODULE_LICENSE("Dual BSD/GPL");原创 2010-12-15 11:25:00 · 725 阅读 · 0 评论 -
svn在linux下的使用(svn命令)
1、将文件checkout到本地目录svn checkout path(path是服务器上的目录)例如:svn checkout svn://192.168.1.1/pro/domain简写:svn co 2、往版本库中添加新的文件svn add file例如:svn addtest.php(添加test.php)svn add *.php(添加当前目录下所转载 2011-10-18 17:43:21 · 2166 阅读 · 0 评论 -
按键驱动--中断的例子
作为中断的一个例子,按键驱动最具有代表性了。 1、建立key文件夹 2、在key文件夹下建立驱动程序buttons.c #include #include #include #include #include #include #include #include #include #include #include #includ原创 2010-12-26 16:36:00 · 640 阅读 · 0 评论 -
platform设备驱动框架
这里简单总结下platform总线的设备驱动代码的框架。 1、建立文件夹platform 2、在文件夹下编写设备文件device.c #include #include #include #include #include #include MODULE_AUTHOR("WJB");MODULE_LICENSE("Dual BSD/GPL");原创 2010-12-15 11:26:00 · 684 阅读 · 0 评论 -
[转载]从传统驱动开发到驱动模型
文章节选自:http://ybmmwjl.blog.163.com/blog/static/65638781201082073454413/<br /><br />1.1 整体架构及原理分析<br />如图所示,应用程序与VFS之间的接口是系统调用,而VFS与设备驱动之间的接口是file_operations。我们平时在使用系统调用的时候,都是使用同一套接口,比如read,write,open,close等,file_operations则是将系统调用和驱动程序关联起来的关键数据结构,是一系转载 2010-12-10 17:49:00 · 657 阅读 · 0 评论 -
2440第一个驱动
以前只是在PC上写了些模块驱动,也在44b0上运行过简单的字符驱动模块,但是44b0上是直接把模块编到内核的,真正作为模块在开发板上运行,这次还真是头一次。0、建立文件夹memdev1、模块代码 在文件夹memdev下编写模块文件memdev.h和memdev.c。这部分就不详细叙述了,随便找个内核模块或者字符设备驱动的教程看看就知道了。2、Makefile Makefile要制定编译的环境的路径。 1)要准备路径,所以首先要将mini2440的内核代码解压到Linux的PC机上。我原创 2010-12-06 22:38:00 · 445 阅读 · 0 评论 -
44b0实验-Timer输出PWM信号实验
<br />Timer有个功能是输出PWM信号。实验代码如下<br />/****************************************************************************<br />***************************定时器初始化,让PE7、6、5、4输出PWM信号*****************<br />***************************************************************原创 2010-08-08 21:41:00 · 689 阅读 · 0 评论 -
44b0实验-看门狗实验
<br />中断实验搞定以后,看门狗就完全不在话下了。这个实验呢,分两部分。第一部分就是隔一段时间让看门口产生一个中断,在中断处理程序里对中断进行计数,当达到指定计数值的时候,完成第一部分的实验。第二部分是关掉中断,当看门狗增长到一定值以后,没人喂狗,就会自动重启。<br /> <br />下面是代码:<br />/****************************************<br /> * Watch-dog timer test *<br /> ******************原创 2010-08-08 21:31:00 · 389 阅读 · 0 评论 -
44b0实验-中断实验
<br />之前也提到的过,区区一个简单的中断实验竟然让我大动干戈,费了N久才搞定。现在把具体实验写写吧。<br /> <br />先把代码贴出来吧:<br />#include <string.h><br />#include "INC/44b.h"<br />#include "INC/option.h"<br />#include "INC/Def.h"<br />#include "eint.h"<br />void __irq Eint4567Isr(void);<br />volatile ch原创 2010-08-08 21:21:00 · 256 阅读 · 0 评论 -
uCLinux的编译
uCLinux的编译其实挺容易的。下面列下步骤1、配置交叉编译环境 将arm-elf-tools-20030314.sh拷贝到/home/wjb/下(目录可以自己随便选了),运行安装: #sh arm-elf-tools-20030314.sh 注:其实这一步我在之前编译u-boot的时候已经做过了,所以这里不用做了。2、解压uClinux 将uClinux-armsys-050101.tar.gz拷到/home/wjb/下,解压 #tar xvzf原创 2010-06-12 15:22:00 · 2050 阅读 · 0 评论 -
uCLinux下的第一个应用程序
uCLinux下的第一个程序很快就跑过了,呵呵。记录下过程吧:原创 2010-06-12 22:34:00 · 220 阅读 · 0 评论 -
44b0学习日记(2)
每天进步一点点啊。今天在写了个最简单的hello world程序,将其连同ucLinux内核一同编译后,烧到flash里。重启后,果真在bin目录下找到了我写的程序。运行一下,还真是可以,呵呵。虽然在ubuntu的虚拟机上写过不少应用程序了,但是在实际上的操作系统中写应用程序还是头一回。今天收获还是不少的:1)ucLinux内核的烧写2)如何将应用程序编进内核接下来要做的是编写个驱动程序,在44b0板子上跑跑看。原创 2010-06-12 22:31:00 · 237 阅读 · 0 评论