- 博客(22)
- 收藏
- 关注
原创 计算机网络学习20250524
将端系统连接到边缘路由器的物理链路——家庭接入、机构接入、广域无线接入边缘路由器:端系统到任何其他远程端系统的路径上的第一台路由器。
2025-05-24 23:31:11
889
原创 驱动开发学习20250523
功能:表示内核对象类型,描述通过ktype字段嵌入kobject的对象类型,控制在创建和销毁kobject时以及在读取或写入属性时发生的操作。
2025-05-23 21:20:06
1235
原创 驱动开发学习20250521
允许设备在没有CPU干预的情况下访问主存储器RAM,使CPU完成其他任务。当需要传输数据块时,处理器向DMA控制器提供源地址和目标地址以及总字节数,然后DMA控制器会自动将数据从源传输到目标,而不会占用CPU周期。剩余字节数为0时,块传输结束。
2025-05-21 23:28:21
863
原创 驱动开发学习20250520
page指针指向要映射的struct page。当分配高端内存页时不能直接寻址,必须调用kmap()函数将高端内存暂时映射到内核地址空间(在不需要该内存时应立即撤销)。该映射持续到调用kunmap()位置。缓存:将经常访问或新写入的数据从称作缓存的更快的小存储器提取或写入其中的过程。kmap():用于将指定的页面映射到内核地址空间。脏内存:缓存的内容被修改后尚未写回磁盘。
2025-05-20 21:35:01
863
原创 驱动开发学习20250519
slab:由数个页面帧组成的一块连续的物理内存,每个slab分成大小相同的块,用于存储特定类型的内核对象缓存:由一个或多个slab构成的链表,他们在内核中表示为struct kmem_cache_t 结构的实例,该缓存只存储相同类型的对象slab状态:空、部分空、满slab分配器的种类:SLOB:尽可能紧凑SLAB:尽可能缓存友好SLUB:需要较少的指令成本。
2025-05-19 21:16:15
492
原创 驱动开发学习20250516
虚拟地址空间大小:4G(32位系统)分割为内核空间虚拟地址和用户空间虚拟地址分割方式:用户空间为较低的3GB虚拟地址空间,内核使用剩余的1GB内核地址在地址空间的起始位置的默认值:0xc0000000,此值可以修改:X86:0xc0000000, ARM:80000000访问内核空间地址需要特权模式常见布局内核空间地址用户空间地址每个进程共享地址空间的原因:将内核的虚拟地址映射到每个进程的虚拟地址空间能够避免每次进入或退出内核时内存地址切换产生的开销。
2025-05-16 21:26:20
675
原创 驱动开发学习20250515
在连续缓冲捕获激活时,应防止驱动程序在各个通道上执行sysfs数据捕获(由read_raw()钩子执行),因为read_raw()钩子和触发器处理程序将尝试同时访问设备。
2025-05-15 21:24:08
419
原创 小白学习驱动开发20250511
驱动程序架构i2c_driver结构probe()函数原型:static int foo_probe(struct i2c_client *client,const struct i2c_device_id *id)普通i2c通信I2C通信函数参数:struct i2c_client,要读取或写入的字节,要读取或写入的字节数返回值:读/写的字节数
2025-05-11 14:38:38
420
原创 小白学习驱动开发20250510
硬件描述文件节点命名形式:<name>[@<address>]name:字符串,最多31个字符[@<address>]:可选,取决于节点是否为可寻址设备,
2025-05-10 16:26:45
436
原创 小白学习驱动开发20250509
:用于直接访问结构体或联合体变量的成员 例:如果有一个指向结构体的指针变量p,其中包含成员变量x,可以使用p->x访问x。->:用于通过指针访问结构体或联合体变量的成员 例:如果有一个结构体变量s,其中包含成员变量x,可以使用s.x访问x。如果匹配成功,内核通知(netlink套接字通信机制)设备管理器加载与设备匹配的驱动程序。每当连接新设备或者向总线添加新的驱动程序时,总线都会启动匹配循环。首先调用匹配函数检查是否有已注册的驱动程序与该设备匹配。总线驱动程序负责设备和驱动程序的匹配。
2025-05-09 21:16:19
283
原创 小白学习驱动开发20250506
copy_from_user():把缓冲区内容从用户空间复制到内核空间copy_to_user():把缓冲区内容从内核空间复制到用户空间单值复制put_user(x,ptr):将内核空间中的变量值x复制到用户空间地址ptr中。成功时返回0,出错时返回-EFAULTget_user(x,ptr):将用户空间中的变量值复制到内核空间,x代表存储结果的内核变量,ptr代表用户空间的源地址。成功时返回0,出错时返回-EFAULT,错误时x被设置为0。
2025-05-06 22:03:45
412
原创 小白学习驱动开发20250429
竞争者从调度器的运行队列中删除,放入处于睡眠状态的等待链表(wait_list)中,然后内核调度并执行其他任务,当锁被释放时,等待队列的等待者被唤醒,从等待列表移出并被重新调度。字符设备通过字符以流方式向用户程序传递数据,字符设备驱动通过/dev目录下的特殊文件在设备和用户程序间交换数据,也可以通过它控制实际的物理设备。系统中可能有很多个同种设备,内核通过次设备号来确定当前所指向的是哪个设备。主设备号用来区分不同种类的设备,次设备号用来区分同一类型的多个设备。softIRQ:软件中断,在原子上下文执行。
2025-04-29 21:33:07
281
原创 小白学习驱动开发20250428
含义:在当前目录中有一个名为mymodule.o的对象,mymodule.o将从mymodule.c或mymodule.s构建,构建方式取决于的值。jiffies每秒增加HZ次,如果HZ为1000,递增1000次,每1/1000s一次tick。:用于处理被阻塞的I/O,以等待特定条件成立,并感知数据或资源的可用性。当使用模块参数时,应使用MODULE_PARA_DESC描述每个参数。MODULE_PARA_DESC(参数名称,“参数描述”)前缀+读/写/执行权限+用户/组/用户、组和其他。
2025-04-28 21:59:19
177
原创 小白学习驱动开发20250427
module_init()用于声明模块加载(使用insmod或modprobe)时应该调用的函数module_exit()用于声明模块邪载(使用rmmod)时应该调用的函数在模块加载或卸载后,init函数和exit函数立即运行一次执行可打印指定内核模块的不同组成部分.text:包含程序代码.data:包含初始化数据,也成为数据段.rodata:用于只读数据.comment:注释。
2025-04-27 22:10:20
379
原创 小白学习驱动开发20250425
CONFIG_MODULE_UNLOAD=y启用rmmod功能内核中有一个计数记录模块的使用次数,如果内核判断模块在使用,就不会删除它CONFIG_FORCE_UNLOAD=y配置内核不会判断模块有没有在用。block/:包含块存储设备代码,调度算法crypto/:包含密码API和加密算法代码documentation/:包含不同内核框架和子系统所使用的API的描述。arch/:内核通用,支持的体系结构,该目录包含与处理器相关的子目录,如/arm,/mips。usr/:包含initrams的实现。
2025-04-26 15:06:27
212
1
硬件测试后续发展之路在何方,望解惑
2023-07-08
TA创建的收藏夹 TA关注的收藏夹
TA关注的人