
Linux内核编程
宅学部落-王利涛
这个作者很懒,什么都没留下…
展开
-
linux内核编程13期:内存管理
从零开始,一步一步掌握Linux内存管理子系统框架原创 2022-11-17 08:05:11 · 329 阅读 · 0 评论 -
Linux内核编程12期:设备树overlay与ConfigFS文件系统
在嵌入式Linux下,设备树(device tree)用来描述硬件平台的各种资源,Linux内核在启动过程中,会解析设备树,获取各种硬件资源来初始化硬件。设备树的overlay功能是指可以在系统运行期间动态修改设备树。一般情况下,如上图所示,设备树经过DTC编译器编译为二进制的hello.dtb文件,加载到内存,随Linux内核一起启动后,一般就无法更改了。如果我们想修改设备树,需要修改hello.dts文件文件,重新编译成二进制文件:hello.dtb,然后重新启动内核,重新解析.原创 2022-05-17 17:11:36 · 1384 阅读 · 0 评论 -
Linux内核编程11期:设备树(device tree)
设备树(device tree)机制是Linux内核从linux-3.x版本开始引进的一种机制,目的是解决内核源码的arch/arm目录下代码混乱的问题:随着ARM生态的快速发展,在内核源码的arch/arm目录下,存放着几十种arm芯片和几百个开发板相关的源文件,很多开发板和处理器的中断、寄存器等相关硬件资源都在这个目录下以.c或.h的文件格式定义。而对于内核来说,与这些硬件耦合,会导致内核代码混乱不堪,每个开发板上运行的内核镜像都必须单独编译配置,无法通用。什么时候Linux内核能像Windows镜像那原创 2022-04-28 19:10:53 · 1399 阅读 · 0 评论 -
Linux内核编程10期:platform设备驱动
platform是Linux内核中的一种虚拟总线,在嵌入式ARM平台下用来管理设备资源和驱动。对于从事嵌入式Linux驱动开发者来说,platform是一个必须具备的基本技能,因为内核中大部分驱动都是使用platform模型封装的,设备驱动一般都会挂到platform总线上,统一进行资源管理。本期课程是一个编程实战课,主要分享platform总线型驱动的编程方法,包括总线驱动的match方法、设备资源resource的管理、驱动复用id_table、设备资源的自动释放等常用的机制。除此之外,更重要的原创 2022-02-16 15:25:03 · 202 阅读 · 0 评论 -
Linux内核编程09期:设备模型和sysfs文件系统
设备模型是Linux内核中一个非常重要的概念,很多复杂的驱动(比如platform、USB、I2C),都是以设备模型为基础进行构建的。如果你在阅读驱动源码时感觉很吃力,感觉太复杂,错综复杂,无法真正理解其全景框架和底层的运行逻辑,这里真诚地建议你可以尝试从设备模型学起:设备模型以最核心的kobject和kset数据结构构建了设备树的基本骨架,又通过device、bus、driver、class进一步封装,构建了设备模型的基本能力:总线匹配、电源管理、热插拔机制...本期课程从设备模型最核心的kobjec原创 2022-02-16 15:23:49 · 395 阅读 · 0 评论 -
Linux内核编程08期:debugfs文件系统
嵌入式Linux内核驱动的常规开发步骤,一般是这样的:看芯片手册,修改寄存器或驱动源码 重新编译内核镜像,或驱动模块 将编译好的镜像拷贝到SD卡 将SD卡镜像插到开发板 重启内核,或者重新加载驱动 测试驱动是否正常工作 如果驱动无法工作,返回第一步循环从编译、运行到调试,一圈走下来,通常需要10~15分钟,也就是说,哪怕你只修改了一行代码,也要把这个流程再走一遍,在宿主机的交叉开发效率,相比PC开发,效率会低很多。如果公司配套的有高端的调试器,比如TRACE32,可以通过仿真、单步原创 2022-02-16 15:19:54 · 535 阅读 · 1 评论 -
Linux内核编程07期:proc文件系统
打开一个Linux shell终端,进入/proc目录,你会发现该目录下有很多文件和子目录:root@ubuntu:/proc# ls1 1239 1944 218 231 260 293 7 920 locks10 124 1949 2181 2316 261 294 770 93 mdstat100 1241 1952 219 232 262 295 771 933 meminfo101 125原创 2022-02-16 10:09:17 · 419 阅读 · 0 评论 -
Linux内核编程06期:文件系统
Linux内核的哲学是:一切皆文件。无论是普通的磁盘文件、还是鼠标、键盘、显示器、SD卡,网卡,都可以使用文件模型进行封装,通过标准的系统调用:open、close、read、write来访问。本期课程录制背景在嵌入式项目开发中,很多人可以很快解决工程上的问题:通过busybox制作根文件系统、格式化和挂载一个磁盘、设置root/init等启动参数去挂载不同的根文件系统,通过read/write去读写文件,但对于底层文件系统的细节可能就不是很清楚了,比如:busybox到底是个什么东西?原创 2022-02-16 10:07:27 · 574 阅读 · 0 评论 -
Linux内核编程05期:字符设备驱动
字符驱动算是Linux驱动中比较简单的一种了,本期课程以上一期的课程为基础,在学员掌握了中断编程的基础上,以实时时钟RTC为例,在vexpress ARM开发板上,从零开始,一步一步学习编写第一个字符设备驱动。实现了RTC字符设备驱动的基本功能:字符设备的创建、注册、设备号申请 字符设备的中断处理 file_operation接口的填充 读取RTC实时时间 设置RTC时间 设置RTC闹钟为了更方便用户开发应用程序,在完成字符设备驱动功能的基础上,并对RTC驱动的ioctl接口进.原创 2022-02-16 10:03:26 · 368 阅读 · 0 评论 -
Linux内核编程04期:驱动中断编程实战
在Linux内核驱动开发中,中断是不可缺少的重要一环。CPU在和外部设备通信,绝大部分是通过中断完成的。本期课程,为《Linux内核编程》第四期,将会带领大家从中断的基础概念开始,以RTC为例,一步一步编写裸机环境下的中断程序,学习中断处理流程,理解GIC中断控制器的内部逻辑和在中断处理过程中发挥的作用。熟悉的底层的基本硬件之后,接下来会带领大家在Linux环境下,使用Linux内核提供的编程接口,来完成RTC驱动的中断程序的编写、调试和运行。最后,在中断下半部中,分别使用软中断、t原创 2022-02-14 12:58:59 · 498 阅读 · 0 评论 -
Linux内核编程03期:系统调用
高端的程序员往往采用最朴素的编程方式。能不能复用别人的代码,避免重复造轮子,是衡量程序员工作效率、是否能按时下班的关键。我们编写一个add()函数,只要封装得好,就可以给很多人使用,这样就可以减少他人重复劳动,避免重复造轮子。// add.c int add(int a, int b){ return a + b;}//add.hint add(int a, int b);其他的开发者,需要调用add()时,只要在自己的程序中使用#include包含对应的头文件add.h,就原创 2022-02-14 12:54:04 · 791 阅读 · 0 评论 -
Linux内核编程02:Kbuild子系统
Kbuild 即kernel build,是用来编译Linux内核的一套Makefile。Kbuild基于GNU make设计,但是又对Makefile进行了各种扩充: 基于图形界面的菜单式配置 各种预定义目标和变量:menuconfig、obj-y 提供各种跨平台工具和编译 递归式Makefile Linux内核可以灵活自由的高度裁剪和定制,其底层技术支撑除了模块机制之外,还有一项技术就是:可以使用Kbuild编译系统来方便地进行裁剪、配置、编译和安装。内核中的..原创 2022-01-29 09:42:22 · 1575 阅读 · 0 评论 -
Linux内核编程01:模块机制
模块机制是Linux内核非常重要的一个功能,如果从C语言的模块化编程角度来看,Linux内核其实就是由大大小小、层次不同的模块构成的。有的模块比较小,一个C源文件就实现了;有的模块比较复杂,由多个源文件构成。Linux内核的发展史,其实也是内部各个模块的发展史,一个小小的模块,从单一的功能、单一的源文件,慢慢成长发育,成长为多个文件的模块,甚至逐渐迭代成框架、子系统...模块机制给Linux宏内核增加了更多的灵活性:一个内核模块,不需要重新编译内核,就可以在内核运行时动态加载运行,或者动态卸载结束运原创 2022-01-29 09:38:41 · 1202 阅读 · 0 评论