摘要:
kobject /sys 下的文件夹,比如 "dev"、"kernel" 是通过 kobject_create_and_add 创建 一个 struct kobject 类型变量,对应 /sys 内的一个文件夹,"dev" 是 kobject 的名字,也是文件夹的名字 创建 "block" 和 "c 阅读全文
摘要:
System.map linux kernel 编译后产生的 System.map 文件是通过如下命令生成的 nm vmlinux | sort | less 上图中的第二列表示符号类型,如果是小写字母,一般表示局部性,大写字母,一般表示全局性(外部) 其他字母表示的函数类型,可以查询 binuti 阅读全文
摘要:
应用程序通过调用 select / poll 函数,可以实现非阻塞编程,以下举例: int main(int argc, char *argv[]) { int fd; int ret = 0; char *filename; struct pollfd fds; fd_set readfds; s 阅读全文
摘要:
GIC 是 ARM 公司给 Cortex-A/R 内核提供的一个中断控制器,类似 Cortex-M 内核(STM32)中的 NVIC。 GIC:Generic Interrupt Controller,通用中断控制器。 NVIC:Nested Vectored Interrupt Controlle 阅读全文
摘要:
概述 原子(atomic)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为“不可被中断的一个或一系列操作”,可以保证指令以原子的方式运行,即执行过程不被打断。 对一个整数的操作可以用原子函数,避免使用互斥锁、自旋锁等锁机制带来的线程阻塞、锁竞争、死锁、优先级反 阅读全文
摘要:
pin controller pin controller 是用来设置引脚上下拉、三态、驱动强度、复用功能的,作为一个设备树节点,如 testgrp iomuxc: pinctrl@20e0000 { compatible = "fsl,imx6ul-iomuxc"; reg = <0x020e00 阅读全文
摘要:
xxx.mod.c文件源码 xxx.mod.c是编译驱动的时候自动产生的,假设我们编译module.ko,当编译时就会产生一个module.mod.c文件 #include <linux/module.h> #include <linux/vermagic.h> #include <linux/co 阅读全文
摘要:
Linux内核由主内核ELF格式文件(vmlinux)和许多内核模块组成。在构成vmliunx主内核文件中,每一个被声明EXPORT_SYMBOL的符号,都只有一个目的,就是让vmlinux主内核文件之外的内核模块使用这个变量或者函数符号,这个就是给到内核模块来使用的内核导出符号。 组成vmlinu 阅读全文
摘要:
模块代码有两种运行方式,一是静态编译连接进内核,在系统启动过程中进行初始化;一是编译成可动态加载的module,通过insmod动态加载重定位到内核。这两种方式可以在Makefile中通过obj-y或obj-m选项进行选择。 而一旦可动态加载的模块目标代码(.ko)被加载重定位到内核,其作用域和静态 阅读全文
摘要:
https://blog.csdn.net/u013836909/article/details/120962422 Linux ARM系统调用过程分析(一)——Linux编程中的API函数和系统调用的关系 Linux ARM系统调用过程分析(二)——Linux系统调用流程分析 Linux ARM系 阅读全文