linux内核编程
文章平均质量分 51
流水石板路
物联网 机器人 自动控制 嵌入式
展开
-
netlink经典帖子--转载
注:在bind时用到的是group组的掩码,参考内核代码使用。转载 2023-04-03 19:47:48 · 75 阅读 · 0 评论 -
设备驱动模型--存储技术原理分析笔记 基于2.6.43内核
本文为读书笔记,详细内容参考《存储原理技术分析》原创 2023-02-27 21:58:15 · 430 阅读 · 0 评论 -
内核启动第二阶段
前言:本帖是学习韦东山老师linux kernel教程,粗略总结的课堂笔记及自己感悟。如想深入了解linux kernel,请绕路。本文分析重点:1- 内核处理uboot传入的启动参数2- 挂载文件系统相关帖子:内核启动第一阶段内核Makefile文件简单分析内核配置文件分析--以CONFIG_DM9000为例内核初体验:编译、下载uboot启动第二阶段uboot启动第一阶段UBOOT初体验:编译、下载初识uboot Makefile...原创 2022-02-20 12:57:16 · 1032 阅读 · 0 评论 -
内核启动第一阶段
前言:本帖是学习韦东山老师linux kernel教程,粗略总结的课堂笔记及自己感悟。如想深入了解linux kernel,请绕路。linux启动过程内容较多,本文只是简单分析内核启动流程。并将汇编代码初始化过程称为第一阶段;C代码称为第二阶段。接上文分析,可知内核启动的第一个文件为:arch/arm/kernel/head.S,链接脚本为:linux-2.6.22.6\arch\arm\kernel\vmlinux.lds本文分析重点:如何根据链接脚本的段属性内容,在代码中找.原创 2022-02-18 23:10:46 · 619 阅读 · 0 评论 -
内核Makefile文件简单分析
前言:本帖是学习韦东山老师linux kernel教程,粗略总结的课堂笔记及自己感悟。如想深入了解linux kernel,请绕路。本文简单介绍下linux makefile文件结构。内核源码文档:\Documentation\kbuild精华帖:Linux内核Makefile文件(翻译自内核手册) - 冷烟花 - 博客园相关帖子:内核配置文件分析--以CONFIG_DM9000为例内核初体验:编译、下载uboot启动第二阶段uboot启动第一阶段U...原创 2022-02-16 21:36:32 · 932 阅读 · 0 评论 -
内核配置文件分析--以CONFIG_DM9000为例
前言:本帖是学习韦东山老师linux kernel教程,粗略总结的课堂笔记及自己感悟。如想深入了解linux kernel,请绕路。本文以CONFIG_DM9000网卡配置为例简单介绍内核的配置文件。相关帖子:内核初体验:编译、下载uboot启动第二阶段uboot启动第一阶段UBOOT初体验:编译、下载初识uboot MakefileCONFIG_DM9000都存在在那些文件?在内核中搜索CONFIG_DM9000,可以看到CONFIG_DM9000主要...原创 2022-02-13 16:47:38 · 433 阅读 · 0 评论 -
内核初体验:编译、下载
前言:本帖是学习韦东山老师linux kernel教程,粗略总结的课堂笔记及自己感悟。如想深入了解linux kernel,请绕路。相关帖子:uboot启动第二阶段uboot启动第一阶段UBOOT初体验:编译、下载初识uboot Makefile环境说明S3C2440开发板串口线下载线光盘linux kernel源码、补丁文件:002_JZ2440资料光盘_20200423(免费)\资料光盘\B盘\uboot+kernel+filesystem..原创 2022-02-13 16:04:27 · 548 阅读 · 0 评论 -
线程、进程--摘自野火教程
进程详解参考1- 进程:;线程详解参考:7. 线程。本处只摘录线程概念中容易忽略的点:1- Linux系统中的每个进程都有独立的地址空间,一个进程崩溃后,在系统的保护模式下并不会对系统中其它进程产生影响, 而线程只是一个进程内部的一个控制序列,当进程崩溃后,线程也随之崩溃,所以一个多进程的程序要比多线程的程序健壮, 但在进程切换时,耗费资源较大,效率要差一些。但在某些场合下对于一些要求同时进行并且又要共享某些变量的并发操作, 只能用线程,不能用进程。2- 而当在进程中创建一个新线程时,新的执行线转载 2021-04-09 17:29:42 · 91 阅读 · 0 评论 -
execl族--摘自野火教程
详细解读、示例参考1.6.3. exec系列函数进程实验。主要摘录重点内容如下:使用fork()函数启动一个子进程是并没有太大作用的,因为子进程跟父进程都是一样的, 子进程能干的活父进程也一样能干,因此世界各地的开发者就想方设法让子进程做不一样的事情, 于是诞生了exec系列函数。这个系列函数主要是用于替换进程的执行程序, 它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段, 在执行完之后,原调用进程的内容除了进程号外,其他全部被新程序的内容替换。 另.转载 2021-04-09 16:57:54 · 80 阅读 · 0 评论 -
select/poll/epoll--摘自野火教程
详细内容参考:深入了解select、poll、epoll之间的区别。野火没有提供示例程序,自己找下。转载 2021-04-09 16:22:43 · 112 阅读 · 0 评论 -
互斥量--摘自野火教程
详细参考互斥量野火教程。需要注意互斥量可以循环嵌套。例如线程A获得了互斥量,线程A在未释放前可以继续嵌套获取互斥量,但是只有释放嵌套次数,才算真正释放互斥资源。示例中的join只是提供线程全部退出的时机,为销毁互斥量做准备。...转载 2021-04-09 15:34:03 · 140 阅读 · 0 评论 -
信号量--摘自野火教程
信号量有两种:system-V IPC 信号量和POSIX信号量。平时帖子以及《UNIX环境高级编程》中讲到的都是POSIX信号量。这两种信号量大致原理相同,只是接口不一样。不必太刻意区分。system-v IPC信号量参考system-v IPC信号量;POSIX信号量参考:POSIX信号量。野火教程讲解、示例都很到位,自己跑一遍用例应该就可以明白了。自己在跑POSIX有名信号量例程时,有一点疑惑:为何父子进程都需要进行sem_open操作,这样不多余吗?后来调试发现必..转载 2021-04-09 14:43:12 · 110 阅读 · 0 评论 -
信号--摘自野火教程
详情参考:野火教程。仅摘录之前没有注意到的点,如下:信号值为1~31的信号属性非实时信号,它主要是因为这类信号不支持排队, 因此信号可能会丢失。比如发送多次相同的信号,进程只能收到一次, 也只会处理一次,因此剩下的信号将被丢弃。而实时信号(信号值为34~64的信号)则不同, 它是支持排队的,发送了多少个信号给进程,进程就会处理多少次。为什么说信号还有可靠与不可靠呢,这得从信号的处理过程来介绍了: 一般来说,一个进程收到一个信号后不会被立即处理,而是在恰当时机进行处理! 一般是在中断返回的时候,或转载 2021-04-08 14:19:18 · 100 阅读 · 0 评论 -
共享内存--摘自野火教程
详细内容、示例代码参考:野火教程--共享内存正常情况两个进程间的虚拟内存是隔离的,无法互相访问。共享内存就是两个进程把自己的进程空间的一部分映射到一块统一的物理内存中,这样两个进程通过这块共享内存就可以交互数据了。从原理上说,这块共享的内存块属于临界资源,需要在两个进程读写这块内存时做好互斥访问。后续:野火给的示例代码,用到信号量来互斥访问共享内存,但是两个客户程序都去检查是否创建,若没创建则创建,但是初始化时候只在读用户程序中执行了。这样感觉可能不是可靠的。感觉应该用并..转载 2021-04-07 22:41:01 · 199 阅读 · 0 评论 -
消息队列--摘自野火教程
参考消息队列讲的很明白了,自己看吧,示例代码实测有效。跑一遍示例代码就全明白了。转载 2021-04-07 19:42:07 · 99 阅读 · 0 评论 -
匿名管道/FIFO管道--摘自野火教程
详情查看野火教程:3. 管道。1- 匿名管道用于父子间通过管道通信,示例参考野火教程2- FIFO打破父子进程条件约束,可以是两个毫不相关的进程间通讯。示例参考野火教程。运行了下,野火教程代码好像有bug,main开头判断下管道是否建立,可以解决该问题。野火教程为父子进程间使用FIFO,非父子进程FIFO通信参考:Linux 进程间通信基础(四)--fifo管道。学会没学会,全靠教程带。野火牛逼!...转载 2021-04-07 15:41:05 · 118 阅读 · 0 评论 -
socket编程--摘自野火教程
教程原文套接字,对着原文写下每个人应该都能明白啥意思吧,不会自己反思下。可以找个服务器(虚拟机),在windows本地给服务器(虚拟机发消息)。服务器上用c代码写,windows上使用python写。c代码参考野火教程,python代码也参考野火教程的C实现+python实现实际过程中可能遇到问题,比如端口拒绝访问,参考:【python】ConnectionRefusedError: [WinError 10061]造成这种返回结果的可能原因:1、代码问题2、本机代理设置问题.转载 2021-04-06 20:01:54 · 125 阅读 · 0 评论 -
文件系统 系统调用 文件操作--摘录自野火教程
本文只再录部分内容,详情查看野火教程。1- 文件系统1.1- 使用文件系统原因 从EEPROM、Nor FLASH、NAND FLASH、eMMC到机械硬盘,各种各样的存储器本质就是具有多个能够 存储0和1数据单元的设备,存储内容时,程序需要直接访问这些存储单元的物理地址来保存内容。这样直接 存储数据会带来极大的不便,如难以记录有效数据的位置,难以确定存储介质的剩余空间,以及应以何 种格式来解读数据。就如同一个巨大的图书馆无人管理,杂乱无章地堆放着各种书籍,难以查找。 为了...转载 2021-04-06 15:08:31 · 251 阅读 · 0 评论 -
CPU亲和性-将进程绑定在指定CPU
前言linux可以指定进程运行在指定的CPU上,相关接口:CPU_ZERO:清零掩码CPU_SET:设置CPU掩码sched_setaffinity:将进程绑定在指定CPU上参考:CPU亲和性man手册之sched_setaffinity程序来源man手册之sched_setaffinity.查看cpu核数命令(参考:查看CPU核数):查看CPU信息(型号)[root@AAA ~]# cat /proc/cpuinfo | grep name | cu...原创 2020-11-04 13:57:21 · 299 阅读 · 0 评论 -
设置、获取进程优先级-linux进程管理-4
接口int getpriority(int which, int who);返回一组进程的优先级setpriority(int which, int who, prio)nice(prio)详细参考:获取设置进程优先级示例父进程,设置、获取其pid#include<stdio.h>#include<stdlib.h>#include<string.h>#include<time.h>#include<stdde.原创 2020-11-03 20:48:04 · 405 阅读 · 0 评论 -
创建守护进程-linux进程管理-3
初识守护进程守护进程就是父进程fork后,父进程自己退出,子进程脱离父进程运行,并且会话组之类的脱离父进程。现在的子进程自立门户,且进入后台运行,此时就叫守护进程。守护进程可用于在后台监控,比如监控dmesg中是否有异常信息等。称为守护进程的条件:1- 父进程fork后exit2- 子进程创建一个会话,并自己担任会话组组长。setsid()3- 将工作路径切换到根路径。chdir("/")4-重设文件权限掩码。umask(0)5- 关闭文件描述符。close(i)为何..原创 2020-11-03 20:13:51 · 93 阅读 · 0 评论 -
多进程内线程并、串行执行关系验证
目的:看下父进程内多个线程间是否并行、串行执行查看父子进程中线程并行、串行执行示例:操作步骤:1- fork创建两个进程:partent、child。2- 在partent进程中利用pthread接口创建两个线程:thread_partent、thread_partent_hello3- 在chile进程中创建一个线程:thread_child4- 通过打印看下进程间执行是否有顺序。观察结果:1- 由于父进程中创建了两个线程,且在thread_parte...原创 2020-10-29 21:52:39 · 339 阅读 · 0 评论 -
SCHED_RR SCHED_FIFO-linux进程管理
参考:https://www.cnblogs.com/arnoldlu/p/9025981.htmlhttp://blog.chinaunix.net/uid-24774106-id-3379478.htmlhttps://stackoom.com/question/3jHrK/%E5%AE%8C%E5%85%A8%E5%8F%AF%E6%8A%A2%E5%8D%A0%E7%9A%84Linux%E5%86%85%E6%A0%B8%E4%B8%AD%E7%9A%84SCHED-FIFO%E...原创 2020-10-28 22:47:49 · 426 阅读 · 0 评论 -
tasklet-linux进程管理
https://www.cnblogs.com/sky-heaven/p/8043190.html原创 2020-10-26 19:27:55 · 89 阅读 · 0 评论 -
schedule解析-linux进程管理-2
参考:schedul()函数解析原创 2020-10-24 14:11:00 · 106 阅读 · 0 评论 -
初识内核进程--linux进程管理-1
参考:https://www.cnblogs.com/zhangxuechao/p/11709830.html原创 2020-10-21 15:19:49 · 126 阅读 · 0 评论 -
linux 链表操作
参考:https://blog.csdn.net/fuyuande/article/details/80646294原创 2020-10-13 14:10:54 · 93 阅读 · 0 评论 -
sysfs-kset
写在前面:kset是一种特殊的kobj可以类比为链表,链表头包括head、tail、count等参数,下挂第一个链表元素,第二个....kset与此类似,下挂第一个kobject、第二个...不要把这玩意想的太复杂,感觉就是链表的基本原理,实操一把就知道什么意思了。对于涉及的深层次内核处理不做过多研究,只看下怎么用,怎么处理的。示例:#include <linux/module.h>#include <linux/timer.h>#...原创 2020-08-12 23:07:00 · 256 阅读 · 0 评论 -
驱动、内核学习法门
无意间看帖子发现内核已经给我们做好了一系列的例子,已经在指引我们前行了,不要去网上什么示例了。讲真的,网上的帖子可能是人家自己给自己看的,给你解惑的。所以不要埋怨别人帖子写的垃圾!想看明白自己多写多悟!当然这些话是将给我自己听的,哈哈哈哈.闲话收一收,上内核示例路径:kernel\linux-source-4.13.0\samples\别告诉我,你连内核代码都没有下。。。。...原创 2020-08-05 22:03:06 · 172 阅读 · 0 评论 -
内核代码中数据转换接口
1- 将字符转化为intint kstrtoint(const char *s, unsigned int base, int *res)参考:内核示例kobject-example.c2- 将int型变量名转化为字符串__stringify(x...)参考:内核示例kobject-example.cint name;char cov_name[10] cov_name = __stringify(name); //执行后cov_name="name"...原创 2020-08-05 21:52:31 · 409 阅读 · 0 评论 -
多线程编程、进程之经验贴
【多线程编程】博主的几篇博客比较系统的讲解了多线程的知识点,主要有附了demo,便于理解实操。链接:https://www.cnblogs.com/wuyepeng/p/9749956.html【进程、线程调度】宋宝华大神录得视频,讲解的还是很到位的,建议先看下相关知识点再看视频。链接:https://www.bilibili.com/video/BV1V7411f7oG?p=4...原创 2020-07-19 20:43:28 · 128 阅读 · 0 评论 -
5- sem使用
概述:sem用于常用于资源管理、同步。头文件:#include <semaphore.h>接口:【定义】sem_t sem_rd;【初始化】int sem_init(sem_t *sem,int pshared,unsigned int value); //返回值:正常返回0【等待信号量】int sem_wait(sem_t *sem); //信号量值--【释放信号量】int sem_post(sem_t *sem); //sem值++【.原创 2020-07-19 14:32:10 · 671 阅读 · 0 评论 -
4- pthread其他接口
参考:https://blog.csdn.net/u010383937/article/details/78215287https://www.cnblogs.com/lijunamneg/archive/2013/01/25/2877211.htmlphtread_join():监控等待线程结束,阻塞接口。类似进程的wait()pthread_cancel():需要设置被取消线程取消使能、取消类型(延迟、异步)。然后在自己线程里取消该线程1- phtread_join():监控..原创 2020-06-04 23:25:18 · 179 阅读 · 0 评论 -
3- 创建线程
参考:https://blog.csdn.net/choudan8888/article/details/98329862创建线程接口:pthread_create()通过示例简单了解下线程执行情况注意:Makefile脚本加上-lpthread,不然报错示例:#Makeilemain:main.o gcc main.o -o main -lpthreadmain.o:main.c gcc -c -Wall main.c -o main.o .PHONY:cl..原创 2020-06-03 23:23:48 · 182 阅读 · 0 评论 -
2- 等待进程终止
参考:https://blog.csdn.net/dongyanxia1000/article/details/79239333https://my.oschina.net/u/3857782/blog/1857551wait()监控子进程结束,这是个阻塞接口,通过下面的示例可以感性认识到。如果没有子进程或者子进程不结束会返回失败。除了wait()之外,还有wait3()、wait4()、waitpid()等接口,用于监控特定子进程结束示例:#include<st..原创 2020-06-03 22:09:35 · 203 阅读 · 0 评论 -
1- 进程创建
参考帖子:示例不错:https://blog.csdn.net/zy010101/article/details/83690667文字不错:https://blog.csdn.net/qq_38410730/article/details/81193118先贴上代码1- fork创建进程。子进程从父进程复制。#include<stdio.h>#include&l...原创 2020-04-29 08:03:57 · 382 阅读 · 0 评论