linux
文章平均质量分 87
05jin
嵌入式linux,stm32
展开
-
Linux kernel的调试技术
内核中的调试支持内核开发者在内核中建立了很多调试功能。但是这些调试功能会造成额外的输出,并且导致性能下降,因此发行版厂商通常会禁止发行版内核中的这些功能。但是作为一名内核开发者,调试需求具有更高优先级,从而乐意接受额外的调试支持而带来的性能损失。这里列出内核开发的几个配置选项,除特殊指出,所有这些选项均出现在“kernel hacking”菜单。并非所有体系架构都支持其中的某些选线。更多的调试功可能查看lib/Kconfig.debug文件,或者在menuconfig中搜索关键字debug。CO转载 2021-12-02 14:55:09 · 1228 阅读 · 0 评论 -
SQLite 接口API (C/C++)
SQLite -C/C++安装在 C/C++ 程序中使用 SQLite 之前,我们需要确保机器上已经有 SQLite 库。可以查看 SQLite 安装章节了解安装过程。C/C++ 接口 API以下是重要的 C&C++ / SQLite 接口程序,可以满足您在 C/C++ 程序中使用 SQLite 数据库的需求。如果您需要了解更多细节,请查看 SQLite 官方文档。序号 API & 描述 1 sqlite3_open(const char *filena.转载 2021-10-12 16:35:23 · 587 阅读 · 0 评论 -
如何查看进程使用的线程数量?
如何查看当前进程有多少个存活线程呢?方法1)pstree -p 4761(进程ID)。如下截图所示:方法2)cat /proc/4761(进程ID)/status。如下图所示:方法3)top -p 4761(进程ID),然后按H。如下图所示:脚本解释:比如某台服务器的CPU使用率飙升,通过top命令查看是gitlab程序占用的cpu比较大,"ps -ef|grep gitlab"发现有很多个gitlab程序,现在需要查询gitlab各个进程下的线程数...原创 2020-12-10 13:28:49 · 8943 阅读 · 0 评论 -
linux /proc/pid/smaps各字段含义
smaps文件内容格式是:7f4913d8f000-7f4913ddd000 r-xp 00000000 fd:00 791940 /usr/local/boost149/lib/libboost_python.so.1.49.0Size: 312 kBRss: 20 kBPss: 2 kBShared_Clean: 20 kBShar原创 2020-12-10 13:23:43 · 2087 阅读 · 0 评论 -
linux 内存查看方法:meminfo\maps\smaps\status 文件解析
linux 下面查看内存有多种渠道,比如通过命令 ps ,top,free 等,比如通过/proc系统,一般需要比较详细和精确地知道整机内存/某个进程内存的使用情况,最好通过/proc 系统,下面介绍/proc系统下内存相关的几个文件单个进程的内存查看 cat /proc/[pid] 下面有几个文件: maps , smaps, statusmaps 文件可以查看某个进程的代码段、栈区、堆区、动态库、内核区对应的虚拟地址,如果你还不了解linux进程的内存空间,可以参考这里。下图是...转载 2020-11-13 11:50:01 · 1358 阅读 · 1 评论 -
free 命令的一些说明
free命令用了很久了,但是知其然有些不知其所以然。今天为了追查一个内存泄漏问题,特意去仔细研究了一下。一般来说,该命令输出如下: total used free shared buffers cachedMem: 2059500 2042852 16648 0 26708 303484-/+ buffers/cache: 1712660 3.原创 2020-11-13 09:48:37 · 158 阅读 · 0 评论 -
struct timespec 和 struct timeval
struct timespec 和 struct timevaltime()提供了秒级的精确度 .1、头文件 <time.h>2、函数原型time_t time(time_t * timer)函数返回从TC1970-1-1 0:0:0开始到现在的秒数用time()函数结合其他函数(如:localtime、gmtime、asctime、ctime)可以获得当前系统时间或...转载 2020-04-16 10:32:10 · 554 阅读 · 0 评论 -
hid资料收集
从零开始学USB(二十三、USB接口HID类设备(五)_报表描述符总结)https://blog.csdn.net/qq_16777851/article/details/86482646HT66FB5x0 实现 2D Joystick 的程序范例(C 语言)https://www.docin.com/p-1016928771.html...原创 2020-04-01 11:11:40 · 184 阅读 · 0 评论 -
Makefile 动态库 静态库
原创 2020-03-23 15:35:04 · 177 阅读 · 0 评论 -
编译hostapd时,出现错误:/usr/bin/ld: cannot find -lnl
book@ubuntu:/work/project/wifi/04.hostapd/hostapd-2.0/hostapd$ make/usr/bin/ld: cannot find -lnlcollect2: ld returned 1 exit statusmake: *** [hostapd] Error 1问题原因是,没有找到 nl 库 !然后我搜索 这个 n...转载 2020-03-19 15:07:31 · 1302 阅读 · 1 评论 -
交叉编译openssl1.1.1a
交叉编译openssl1.1.1a 交叉编译openssl1.1.1a的时候遇到的问题,记录一下,方便下次查找一、下载源码1.打开openssl官网,下载openssl-1.1.1.tar.gz源码包。2.执行下面的命令解压源码包: $ tar xvzf openssl-1.1.1.tar.gz二、配置openssl1.执行下面的命令配置工程 $...原创 2020-03-19 11:30:21 · 620 阅读 · 0 评论 -
wpa_supplicant-2.6源码交叉编译
源码下载官网:https://w1.fi/releases/libnl-1.1.4交叉编译:./configure CC=xx-gcc \--prefix=/home/xx/openspurce/wpa_s_2_6/opensrc/release \--sysconfdir=/home/xxx/openspurce/wpa_s_2_6/opensrc/release --host...转载 2020-03-19 09:25:56 · 970 阅读 · 0 评论 -
字符串分割 strtok strtok_r strsep
来源:点击打开链接strtok分解字符串为一组字符串。s为要分解的字符,delim为分隔符字符(如果传入字符串,则传入的字符串中每个字符均为分割符)。首次调用时,s指向要分解的字符串,之后再次调用要把s设成NULL。 函数原型:char *strtok(char *s, const char *delim);转载 2017-08-28 17:02:24 · 537 阅读 · 0 评论 -
uevent分析
1.kobject, ktype, ksetkobject代表sysfs中的目录。ktype代表kobject的类型,主要包含release函数和attr的读写函数。比如,所有的bus都有同一个bus_type;所有的class都有同一个class_type。kset包含了subsystem概念,kset本身也是一个kobject,所以里面包含了一个kobject对象。另外,kset中...转载 2018-09-29 14:35:24 · 787 阅读 · 0 评论 -
Shell 管道及执行顺序分析
Shell 管道及执行顺序分析,需要的朋友可以参考下1、基本概念 a、I/O重定向通常与 FD有关,shell的FD通常为10个,即 0~9; b、常用FD有3个,为0(stdin,标准输入)、1(stdout,标准输出)、2(stderr,标准错误输出),默认与keyboard、monitor、monitor有关; c、用 < 来改变读进的数据信道(stdin),使之从指定...转载 2018-11-06 08:50:42 · 1531 阅读 · 0 评论 -
shell字符串
shell脚本里获取字符串的最后一个字符STR=123456abcFINAL=`echo ${STR: -1}`或者FINAL=${STR: -1}都可以让FINAL获得c这个最后一个字符 shell去掉最后一个字符str=387691,387710,387720,387817,387922,388067,如何搞掉最后一个,? 简单快捷的?sed 's/.$...原创 2018-11-06 09:40:41 · 136 阅读 · 0 评论 -
使用ctl_table从用户空间向内核传递参数
root:/proc/sys/kernel/pty# lsmax nr reservestatic int pty_limit_min;static int pty_limit_max = NR_UNIX98_PTY_MAX;static int tty_count;static int pty_count;static inline void pty_i...原创 2019-03-08 16:39:53 · 1425 阅读 · 0 评论 -
ubuntu/linux mint 创建proc文件
在做内核驱动开发的时候,可以使用/proc下的文件,获取相应的信息,以便调试。大多数/proc下的文件是只读的,但为了示例的完整性,都提供了写方法。方法一:使用create_proc_entry创建proc文件(简单,但写操作有缓冲区溢出的危险);方法二:使用proc_create和seq_file创建proc文件(较方法三简洁);方法三:使用proc_create_data和se...转载 2019-03-18 11:01:55 · 245 阅读 · 0 评论 -
Linux内核:工作队列
1. 什么是workqueueLinux中的Workqueue机制就是为了简化内核线程的创建。通过调用workqueue的接口就能创建内核线程。并且可以根据当前系统CPU的个数创建线程的数量,使得线程处理的事务能够并行化。workqueue是内核中实现简单而有效的机制,他显然简化了内核daemon的创建,方便了用户的编程.工作队列(workqueue)是另外一种将工作推后执行的形式...转载 2019-03-19 14:06:34 · 280 阅读 · 0 评论 -
ps kworker irq
kworker通过 ps 命令查看进程状态时,可以查看到kworker相关,大部分格式都是 kworker /u2:0或者 kworker /0:0H, 查看资料得知:内核中有很多kworker,有绑定cpu的和不绑定cpu的,它支持cpu的hotplug时work的迁移。u:是unbound的缩写,代表没有绑定特定的CPU,kworker /u2:0中的 2 是 wor...原创 2019-10-09 10:01:12 · 1875 阅读 · 0 评论 -
查找内核符号表
1.从要编译的内核文件目录下的System.maproot@ubuntu:/opt/EmbedSky/kernel/3g/linux-2.6.30.4# pwd/opt/EmbedSky/kernel/3g/linux-2.6.30.4root@ubuntu:/opt/EmbedSky/kernel/3g/linux-2.6.30.4# grep debug_kernel ./S...原创 2019-10-10 10:26:54 · 489 阅读 · 0 评论 -
disable_irq与disable_irq_nosync使用场景
disable_irq与disable_irq_nosync使用场景Linux设备驱动,关于中断屏蔽有两个接口:disable_irq和disable_irq_nosync,该两接口使用场景如下:1、disable_irq:在非中断处理函数中使用,会阻塞;2、disable_irq_nosync:在中断处理函数中使用,不会阻塞;用于屏蔽相应中断;一、为什么要屏...转载 2019-10-10 13:48:37 · 2186 阅读 · 0 评论 -
Linux调试工具
1. 使用printf调试#ifdef DEBUGPrintf(“valriable x has value = %d\n”, x)#endif然后在编译选项中加入-DDEBUG更复杂的调试应用如:#define BASIC_DEBUG 1#define EXTRA_DEBUG 2#define SUPER_DEBUG 4#if (DEBUG &EXTR...转载 2019-10-11 10:11:55 · 1098 阅读 · 0 评论 -
Linux线程的实现 & LinuxThread vs. NPTL & 用户级内核级线程 & 线程与信号处理
Linux线程的实现 & LinuxThread vs. NPTL & 用户级内核级线程 & 线程与信号处理另,线程的资源占用可见:http://www.cnblogs.com/charlesblc/p/6242111.html进程 & 线程的很多知识可以看这里:http://www.cnblogs.com/charlesblc/p/6135666.html...转载 2019-10-11 17:17:10 · 286 阅读 · 0 评论 -
epoll详解
转载:http://blog.chinaunix.net/uid-24517549-id-4051156.html什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux ker转载 2015-06-13 11:35:12 · 313 阅读 · 0 评论 -
移植ntp服务到arm-linux平台
转载自:http://blog.csdn.net/orange1988319/article/details/8880788,做了一些补充本文参考copy博客:http://www.qiyangtech.com/bbs/read.php?tid=34,根据自己的编译环境进行了适当的修改,本人只使用ntp做客户端参考博客:http://blog.csdn.net/sailor_8318/ar转载 2017-07-27 15:54:57 · 620 阅读 · 0 评论 -
arm开发板使用ntp与服务器同步时间
到网站下载源码http://www.ntp.org/downloads.html板子是help2416开发板,芯片是三星2416,操作系统Linux kernel 3.2$ tar -xvf ntp-4.2.6p5.tar.gz$ cd ntp-4.2.6p5/$ ./configure --host=arm-linux$ make把ntpdate/ntpd转载 2017-07-27 15:34:06 · 1771 阅读 · 0 评论 -
ntpd与 ntpdate 的区别
之前配置ntpd的时候搜到一句话,印象很深刻,也觉得很有标题党的效果,就借鉴为标题了:“我认为有几种人是必须不招聘/裁掉的: 1 用ntpdate代替ntpd的人”但具体原因不太懂,总觉得还是用ntpdate比较方便。今天问了红帽技术支持,对方的解释是:ntpd在实际同步时间时是一点点的校准过来时间的,最终把时间慢慢的校正对。而ntpdate不会考虑其他程序是否会阵痛,直接调整时间转载 2017-07-27 14:57:21 · 676 阅读 · 0 评论 -
从用户态的open到内核驱动实现流程
从用户态的open到内核驱动实现流程 作者:李老师, 华清远见嵌入式学院讲师。 问题来源: 在讲授Linux初级驱动的时候,我发现困惑很多同学的是不真正理解从应用层到我们自己所写的驱动层的调用过程,所以写此文章来大概描述。 首先我们知道,在我们目前的Linux系统中,我们大概共约300左右个系统调用,其中syscall_table.S列出了所有的系统调用表。转载 2015-07-27 17:04:24 · 1679 阅读 · 0 评论 -
Linux内核调试方法总结
Linux内核调试方法总结 http://my.oschina.net/fgq611/blog/113249#OSC_h3_9 linux调试目录[-]一 调试前的准备二 内核中的bug三 内核调试配置选项1 内核配置2 调试原子操作四 引发bug并打印信息1 BUG()和BUG_ON()2 dump_s转载 2015-07-08 10:16:52 · 1300 阅读 · 0 评论 -
中兴4g模块ME3760模块开发中遇到的问题
1.貌似很多错误,但主要的问题是头文件缺少导致的问题。drivers/net/usb/cdc_ether.c:43:20: error: usbnet.h: No such file or directoryroot@ubuntu:/opt/EmbedSky/kernel/3g/linux-2.6.30.4# make CHK include/linux/version.hm原创 2015-07-06 16:42:25 · 5225 阅读 · 2 评论 -
查找内核符号表
1. 编译了内核文件目录下,从 System.map 文件直接得到地址。root@ubuntu:/opt/EmbedSky/kernel/3g/linux-2.6.30.4# pwd/opt/EmbedSky/kernel/3g/linux-2.6.30.4root@ubuntu:/opt/EmbedSky/kernel/3g/linux-2.6.30.4# grep debu原创 2015-07-06 14:49:34 · 1108 阅读 · 0 评论 -
syslog(),closelog()与openlog()--日志操作函数
文章出处:http://blog.csdn.net/xx77009833/archive/2010/07/30/5776383.aspx 为了满足某些目的,进行日志记录是很有必要的。 在典型的 LINUX 安装中,/var/log/messages 包含所有的系统消息,/var/log/mail 包含来自邮件系统的其它日志消息,/var/log/debu转载 2015-06-13 16:47:05 · 568 阅读 · 0 评论 -
linux 设备文件属性
1.cd /dev2.查看当前已经加载的设备驱动程序的主设备号root@ubuntu:/dev# cat /proc/devicesCharacter devices: 1 mem 4 /dev/vc/0 4 tty 4 ttyS 5 /dev/tty 5 /dev/console 5 /dev/ptmx 5原创 2015-06-09 17:38:54 · 1977 阅读 · 0 评论 -
linux 结构体 初始化
1.结构体初始化。static unsigned int armdiv[8] = { [0] = 1, [1] = 2, [2] = 3, [3] = 4, [5] = 6, [7] = 8,};struct clk { struct list_head node; const char *name; /* unique clock name */ str原创 2015-06-09 12:59:54 · 393 阅读 · 0 评论 -
使用popen()执行shell命令并获取内容
1.popen通过管道获取shell的输出结果,跟重定向(ls > /test.txt)类似。root@Easy-link:~# cat /proc/uptime67.23 19.08char*get_uptime(){ float hours; FILE *fp; static char buf[16]; fp = popen("cat /proc/uptim原创 2015-06-26 17:31:35 · 5109 阅读 · 0 评论 -
进程间通信概述
为什么进程间需要通信?1 数据传输 一个进程需要将它的数据发送给另一个进程。2 资源共享 多个进程共享同样的资源。3 通知事件 一个进程需要向另一个或一组进程发送消息,通知他们发生了某件事情。4 进程控制 有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有操作,并能够及时知转载 2015-06-17 20:33:35 · 325 阅读 · 0 评论 -
字节对齐 __attribute__((packed))
struct { u16 id; u64 lun; u16 reserved1; u32 reserved2; } __attribute__ ((packed)) scsi; //如果没有packed默认是字节对齐的如果没有 __attribute__ ((packed)), lun 成员可能被在前面添加原创 2015-07-21 11:39:29 · 996 阅读 · 0 评论 -
最全面的linux信号量解析
http://blog.csdn.net/qinxiongxu/article/details/7830537最全面的linux信号量解析信号量一.什么是信号量信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。信号量的值为正的时候,说明它空闲。所测试的线程可以锁定而使用它。若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒。转载 2015-07-21 19:21:46 · 407 阅读 · 0 评论 -
select函数
select()的机制中提供一个fd_set的数据结构,实际上是一个long类型的数组,每一个数组元素都能与一打开的文件句柄(不管是Socket句柄,还是其他文件或命名管道或设备句柄)建立联系,建立联系的工作由程序员完成,当调用select()时,由内核根据IO状态修改fd_set的内容,由此来通知执行了select()的进程哪个Socket或文件可读。 一、select函数#incl转载 2017-07-26 12:05:21 · 764 阅读 · 0 评论