- 博客(122)
- 收藏
- 关注
原创 Linux设备驱动中的并发控制
假设有一个链表,当然其中有数据,如果要修改其中的数据,自旋锁的思路就是排他性的去修改数据,而RCU的思路是,直接创建一个新的节点,然后原来的节点的内容复制到新节点上,再在新节点上修改数据,最后用新的节点去替代原来的节点,最后等待所有的CPU读完数据之后再去释放原来的节点。读写自旋锁方便的是读的操作,因为普通的自旋锁不关心是读还是写,一视同仁某一时刻只能允许一个执行单元对共享资源进行操作,而读写锁可以允许读的并发操作,但对写只能保持一个执行单元操作共享资源,当然读和写不能同时发生。
2024-01-30 23:14:03
1133
原创 Linux内核模块
Linux的内核模块本来就很大,我们添加或者删除某个其中一个模块时,又得重新编译整个模块,导致很多麻烦,那有没有一种机制是将现有的内核并不包含全部功能,当我们需要某个功能时,其对应的代码动态的被加载在内核中Linux就提供了这种机制叫做模块(module)查看内核模块:lsmod /proc/modules—————或者是lsmod /sys/module加载模块时:可以使用insmod或者modprobemodprobe比insmod更高级,加载模块时会同时加载这个模块所依赖的其他模块。
2024-01-28 21:51:06
1481
原创 Linux文件系统与设备文件
字符设备和块设备体现了Linux中的一切皆文件的设计思想,驱动通过文件操作相关的系统调用和C库函数(本质也属于系统调用)被访问,其次驱动工程师在设备驱动中不可避免会与设备文件系统打交道,这也引出了我们需要掌握设备文件系统的相关知识。
2024-01-22 17:10:08
669
1
原创 Linux内核及内核编译
使用make menuconfig时,配置工具首先分析与体系结构对应的/arch/xxx/Kconfig文件,xxx为传入的ARCH参数,/arch/xxx/Kconfig文件中除本身包含一些与体系结构相关的配置项和配置菜单外,还通过source语句引入一系列Kconfig文件。如果需要几个并发执行的任务,可以启动内核线程,这些线程没有用户空间。内核空间和用户空间用来区分程序执行的两种不同的状态,他们使用不同的地址空间,Linux中只能通过系统调用和硬件中断完成从用户空间到内核空间的控制转移。
2024-01-18 16:55:30
4127
1
原创 makefile教程(3)
但是在第一个目标也有可能是许多目标共同组成的,那么如何去在这么多”第一个“目标中去寻找我想要编译的呢?有时候我们的makefile的名字并不是:makefile 或者是 Makefile。如果我们要编译所有的目标就直接make,就会默认第一个目标all,伪目标也是目标。一个函数库文件可以有许多的文件组成,我们可以指定文件来组成函数库文件。使用指定编译最终目标的方法可以更方便的编译我们的程序。双后缀定义了一对后缀:目标文件的后缀和依赖目标的后缀。把hack和win加入后缀列表的末尾,定义自己的后缀。
2023-12-28 11:37:50
858
原创 Linux操作系统学习(一)、Linux是什么与如何学习
如果一个操作系统适应了一套硬件,但是当新的硬件产品出现之后,这个操作系统就不适用了,所以我们又得去修改操作系统,这种概念就叫做软件移植。
2023-12-13 17:38:29
395
1
原创 Python numpy库的应用、matplotlib绘图、opencv的应用
【代码】Python numpy库的应用、matplotlib绘图、opencv的应用。
2023-07-26 18:55:54
1620
原创 Python 单继承、多继承、@property、异常、文件操作、线程与进程、进程间通信、TCP框架 7.24
【代码】Python 单继承、多继承、@property、异常、文件操作、线程与进程、进程间通信、TCP框架 7.24。
2023-07-24 17:06:09
501
原创 Python 元组、列表、循环、匿名函数、全局变量于局部变量、类和对象、模块的引用 7.21
"""函数定义def函数名(<形参列表>):代码函数调用c = 函数名(<实参列表>)函数参数函数名(a,b)函数返回值return 返回值""" def myfun(a , b) : a += 1 return a + b def myfun1(l1 , l2) : l1 . pop(- 1) # 删除列表最后一个元素 return l1 + l2。
2023-07-21 19:01:11
117
原创 Python 输入输出函数、变量的定义、数据类型(数字,字符串,字典) 7.20
a = b = 13 print(a , b) a , b = 13 , 12 print(a , b) a , b , c = 13 , 12 , 'hello' print(a , b , c) a = 23 b = 25 a , b = b , a print(a , b) a = 1 #给数值1的空间取别名 print(id(a)) #id():计算变量的地址值 a = 2 #给数值2的空间取别名 print(id(a)) b = a print(id(b))
2023-07-20 18:22:09
256
原创 驱动程序设计 平台驱动、Linux内存映射、Linux中断、按键中断控制 7.13
最底层的设备有专门的文件描述符为:kobject上一级为:kset(但作为被管理时也为 kobject)再上一级也为:kset------------------自创:平台总线(platform bus) (plateform device)(plateform driver)
2023-07-17 17:25:21
146
原创 驱动程序设计 Linux设备驱动中的阻塞与非阻塞IO、信号与函数 7.12
阻塞:等待某种资源,如果获取不到,就会把当前任务挂起,等待资源准备好非阻塞:等待某种资源非阻塞,循环搭配,反复的获取异步通知:做自己的事,当资源准备好了,系统通知它去获取资源。
2023-07-12 18:56:37
164
原创 驱动程序设计 Linux设备驱动中的并发控制 自旋锁、互斥锁 7.11
需求:对设备进行保护 (自旋锁),读到的数据,只有数字 或者 只有字母;不希望出现混杂的情况。需求:对设备进行保护 (互斥锁),要求task1时不能task2,不能重复打开同一个文件。task 1 :写“123456789”task 2 :写“abcdefg”1、构造错误的场景,应用构造。1、构造错误的场景,应用构造。task 3 :读设备。2、修改驱动后,不出现。2、修改驱动后,不出现。
2023-07-12 18:53:21
226
原创 驱动程序设计 利用RTC显示年月日时分秒到终端 7.11
用户需求:写一个RTC时钟控制的驱动,实现RTC显示年月日时分秒到用户端驱动需求:设备:RTC模块 功能:打印显示寄存器操作:原理图: 设备–>pin–>设备控制芯片 驱动需求 --> 设备需求芯片手册:设备控制芯片–>寄存器。
2023-07-12 18:49:03
654
原创 驱动程序设计 驱动控制ADC数模转换 7.10
用户需求:写一个ADC的驱动,实现ADC采集的电压1s闪烁一次驱动需求:设备:ADC3 功能:模数转换寄存器操作:原理图: 设备–>pin–>设备控制芯片 驱动需求 --> 设备需求芯片手册:设备控制芯片–>寄存器。
2023-07-12 18:45:55
159
原创 驱动程序设计 驱动程序函数、驱动控制LED闪烁 7.7
人 —> 二进制代码 —> CPU芯片 —> 设备控制芯片 —> 寄存器 —> 设备。 驱动需求(led2亮灭) --> 设备需求(gpx1_1高/低电平)用户需求:写一个led的驱动,实现led2的闪烁。驱动需求:设备:led2 功能:亮 、灭。原理图: 设备–>pin–>设备控制芯片。芯片手册:设备控制芯片–>寄存器。
2023-07-12 18:44:00
200
原创 驱动移植 模块的概念、设备驱动、驱动函数open(),release() 7.6
cat proc/devices (查看已经使用了的设备号)驱动向上与内核挂钩,向下面对设备硬件。次设备号:类设备中的哪一个。调用open()函数的流程。主设备号:哪一类设备。
2023-07-07 12:08:30
391
原创 C语言 二分查找,计算函数给出一个字节中被置 1 的位的个数,将给定的一个字符串转换成整数,将给定的一个整数转换成字符串
【代码】C语言 二分查找,计算函数给出一个字节中被置 1 的位的个数,将给定的一个字符串转换成整数,将给定的一个整数转换成字符串。
2023-07-06 22:46:20
379
原创 系统移植 根文件系统的移植 7.5
根文件系统:根目录下的所有文件和工具的集合文件系统层次结构标准文件具体的属性只能在内核中看到,在挂载终端上看不到。
2023-07-05 22:04:37
187
原创 系统移植 kernel 移植 配置网卡IP NFS网络文件系统移植 7.4
客户端(开发板 kernel)现象:NFS(网络文件系统)思考:服务器(Ubuntu)
2023-07-05 22:01:34
704
原创 系统移植 uboot移植 7.3
思考:uboot网络命令丰富–> common–>cmd_net.c—> ping 有---->有 CONFIG_CMD_PING宏控制–>借鉴别人(板子的头文件中打开)板子重启 <-- 电源模块收到复位信号 <-- 产生复位信号 <--?现象:有显示,可以交互了,但是ping、tftp 网络命令都没有。现象:可以ping命令,但是卡死,终端上net报错。现象:板子灯亮了,闪烁,并且没有显示。思考:复位问题解决,交互问题没有解决。现象:板子的灯一直亮,但没有显示。思考:闪烁—>板子在不断重启。
2023-07-05 21:58:07
159
原创 u-boot的烧写及使用,u-boot-2013.01的移植 6.30
嵌入式系统出现信息则不用烧录ifconfig eth0 192.168.2.250(同网段)在超级终端中./a.out即可运行程序。
2023-06-30 18:55:08
563
空空如也
对于ARM底层原子操作的看法问题,读书读不懂哇?
2024-01-25
TA创建的收藏夹 TA关注的收藏夹
TA关注的人