03 2020 档案
摘要:linux ARM的原子操作源文件位于 linux源码宏展开 最开始由如下宏定义,linux的各种宏太复杂了,分析起来有点费劲 又根据 "GCC内联汇编" 的替换规则,result,tmp,v counter,&v counter,i按照出现的顺序分别替换%0 %4,操作数被逐个替换: 单独提取汇编
阅读全文
摘要:基本内联汇编 基本内联汇编格式比较直观,可以直接这样写: 例如: 扩展内联汇编 前面讨论的基本内联汇编只涉及到嵌入汇编指令,而在扩展形式中,我们还可以指定操作数,并且可以选择输入输出寄存器,以及指明要修改的寄存器列表。对于要访问的寄存器,并不一定要显式指明,也可以留给GCC自己去选择,这可能让GCC
阅读全文
摘要:1.什么是互斥 在计算机执行过程中,对于多个任务,它们共享着一个资源,要求对该资源的存取过程是排他的。 2.为什么要有互斥 不考虑SMP情况,仅分析单CPU情况,因为SMP只不过是更复杂的一种情况,原理类似。 有如下代码片段,其中share_data是一个全局变量。 2.1线程间 如果两个线程都执行
阅读全文
摘要:下面是一个最简单的字符设备驱动。 #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/cdev.h> #include <linux/slab.h> #include <lin
阅读全文
摘要:本文是我迭代学习的笔记,不保证内容的严谨性。 目录 "1.linux内核模块简介" "2.linux内核模块示例" "3.内核模块加载/卸载原理" 1. linux内核模块简介 由于linux内核需要支持多种功能模块或者硬件设备,而这些功能模块或者硬件设备在不同板子上千差万别。受存储空间的限制,不可
阅读全文
摘要:do {} while(0)的妙用 转自 "https://blog.csdn.net/qq_16777851/article/details/80867981" 避免空的宏定义在声明时出现警告 避免出现歧义代码 上面宏在使用时,展开后: 有些风格的代码只有一个语句的if会省略{},这样导致了仅 受
阅读全文