
Linux内核与驱动
fenggui
这个作者很懒,什么都没留下…
展开
-
嵌入式C基础知识
计算机科学基础知识(一):The Memory Hierarchy计算机科学基础知识(二):Relocatable Object File计算机科学基础知识(三):静态库和静态链接计算机科学基础知识(四): 动态库和位置无关代码计算机科学基础知识(五): 动态链接计算机科学基础知识之(六):理解栈帧原创 2015-06-23 22:55:55 · 610 阅读 · 0 评论 -
Linux内核与驱动开发学习总结:initcall 和contain_of宏(十)
内核驱动初始化顺序: main.c/start_kernel() ---> rest_init() ---> kernel_thread(kernel_init, NULL, CLONE_FS | CLONE_SIGHAND) ---> kernel_init() ---> do_basic_setup() ---> do_initcalls() ---> do_one_initcall(转载 2015-06-14 18:07:48 · 481 阅读 · 0 评论 -
Linux无线驱动简介及mac80211源码分析
mac80211源码分析1、概述mac80211:是一个Linux内核子系统,是驱动开发者可用于为SoftMAC无线设备写驱动的框架。mac80211在内核空间实现STA模式,在用户空间实现AP模式(hostapd)。cfg80211:用于对无线设备进行配置管理,与FullMAC,mac80211和nl80211一起工作。nl80211:用于对无线设备进行配置管理,转载 2015-06-06 18:09:45 · 10646 阅读 · 0 评论 -
Linux内核与驱动开发学习总结:字符设备(四)
mknod命令结合设备的主设备号和次设备号,可创建一个设备文件。 1. 使用早期的register_chardev()方法2. 使用cdev的方法3. 使用udev在/dev/下动态生成设备文件的方式 参考:http://www.cnblogs.com/hoys/archive/2011/04/17/2019233.html转载 2015-06-07 11:46:24 · 590 阅读 · 0 评论 -
Linux内核与驱动开发学习总结:原子操作实现(六)
处理器如何实现原子操作32位IA-32处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作。1 处理器自动保证基本内存操作的原子性首先处理器会自动保证基本的内存操作的原子性。处理器保证从系统内存当中读取或者写入一个字节是原子的,意思是当一个处理器读取一个字节时,其他处理器不能访问这个字节的内存地址。奔腾6和最新的处理器能自动保证单处理器对同一个缓存行里进行1转载 2015-06-07 11:59:25 · 994 阅读 · 0 评论 -
Linux内核与驱动开发学习总结:主设备号和次设备号(二)
主设备号:主设备号标识设备对应的驱动程序。 次设备号:次设备号由内核使用,用于正确确定设备文件所指的设备。依赖于驱动程序的编写方式,我们可以通过次设备号获得一个指向内核设备的直接指针,也可将此设备号当作设备本地数组的索引。http://blog.youkuaiyun.com/liangkaiming/article/details/6234238转载 2015-06-07 11:42:09 · 634 阅读 · 0 评论 -
Linux内核与驱动开发学习总结:设备驱动模型(九)
驱动模型:总线(bus_type)、设备(device)、驱动(Driver).在数据结构设计上,总线、设备及驱动三者相互关联。 platform device包含device,根据device可以获得相应的bus及driver。设备添加到总线上后形成一个双向循环链表,根据总线可以获得其上挂接的所有device,进而获得了 platform device。根据device也可以获转载 2015-06-07 12:07:12 · 451 阅读 · 0 评论 -
Linux内核与驱动开发学习总结:中断和中断处理(八)
硬中断:1. 硬中断是由硬件产生的,比如,像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己的IRQ(中断请求)。基于IRQ,CPU可以将相应的请求分发到对应的硬件驱动上(注:硬件驱动通常是内核中的一个子程序,而不是一个独立的进程)。2. 处理中断的驱动是需要运行在CPU上的,因此,当中断产生的时候,CPU会中断当前正在运行的任务,来处理中断。在有多核心的系统上,一个中断通常只能中断一转载 2015-06-07 12:04:01 · 1250 阅读 · 0 评论 -
Linux内核与驱动开发学习总结:内核访问外设IO.map_desc和ioremap(七)
默认外设I/O资源不在Linux内核空间中的,如sram或硬件接口寄存器等),若需要访问该外设I/O资源,必须先将其地址映射到内核空间中来,然后才能在内核空间中访问它。Linux内核访问外设I/O方式有两种:动态映射(ioremap)和静态映射(map_desc)。一、动态映射Ioremapioremap函数返回映射后的内核虚拟地址(3G-4G). 接着便可以通过读写该返回的内核虚拟地址去转载 2015-06-07 12:02:00 · 1131 阅读 · 0 评论 -
Linux内核与驱动开发学习总结:自旋锁和信号量(五)
1、自旋锁和信号量 使用自旋锁的进程不能睡眠,使用信号量的进程可以睡眠。中断服务例程中的互斥使用的是自旋锁,原因是在中断处理例程中,硬中断是关闭的,这样会丢失可能到来的中断。2、RCU 锁http://blog.sina.com.cn/s/blog_6d7fa49b01014q9s.html讨论的内容包括原子操作;自旋锁,内存屏障;读写自旋锁,顺序锁;信号量,读转载 2015-06-07 11:50:55 · 701 阅读 · 0 评论 -
Linux内核与驱动开发学习总结:DMA与中断(一)
DMA:是一种无须CPU的参与就可以让外设与系统内存之间进行双向数据传输的硬件机制,使用DMA可以使系统CPU从实际的I/O数据传输过程中摆脱出来,从而大大提高系统的吞吐率。 中断:是指CPU在执行程序的过程中,出现了某些突发事件时CPU必须暂停执行当前的程序,转去处理突发事件,处理完毕后CPU又返回源程序被中断的位置并继续执行。所以中断和DMA的区别就是DMA不需CPU参与而中断是需要CPU原创 2015-06-07 11:42:09 · 1146 阅读 · 0 评论 -
Linux内核与驱动开发学习总结:内核初始化宏__init(十二)
reference:http://blog.chinaunix.net/uid-25871104-id-2854544.html http://www.tuicool.com/articles/2IVJfar http://blog.youkuaiyun.com/shadow_dance/article/detai转载 2015-06-26 11:36:56 · 1431 阅读 · 0 评论 -
Linux内核与驱动开发学习总结:PCI中线初始化(十一)
在《Linux内核修炼之道》里,文章作者对如何使用Kconfig和Makefile定位内核源码有精彩的阐述。并且该作者还在《Linux那些事儿 之 我是PCI》系列文章中对X86架构下的PCI总线和设备驱动做了很详细的分析。由于工作需要,我在此基础上分析了ARM体系结构的PCI总线驱动,并把心得和笔记整理一下,或许对日后解析其他子系统有所帮助。以下涉及到的Linux内核源码均为2.6.23版本。转载 2015-06-14 18:26:40 · 4071 阅读 · 0 评论 -
Linux内核与驱动开发学习总结:嵌入式中南北桥(三)
1.在嵌入式系统中,所谓的北桥指的是什么?“ 南北桥 ” 主要适用于 INTEL 的 X86 结构体系,和嵌入式系统没有直接的关联。 “ 北桥 ” 主要指母板上 CPU 和内存等高速核心部分的控制和通讯桥接芯片,而 “南桥 ” 则指和扩展总线和 IO 的控制和通讯桥接芯片。 所谓南北的涵义主要体现在其芯片组在母板上的位置(相对于 CPU ) —— 上北下南。 在嵌转载 2015-06-07 11:45:32 · 1032 阅读 · 0 评论 -
Linux与BSD中TCP协议栈实现比较
作为两个最有名的开源操作系统,Linux和FreeBSD是网管们的首选。Linux以开放性和众多的驱动支持著称,而FreeBSD有着优良的UNIX传统,是公认的最稳定的操作系统。那么,在这两个操作系统间,该如何选择呢?幸好,我们有源码,可以从协议栈的实现中寻找答案。 TCP/IP协议栈是网络中广泛使用的事实网络通信标准。最初的TCP实现源自4.4BSDlite,在Linux兴起后,也转载 2015-10-13 17:45:19 · 5448 阅读 · 0 评论