
驱动开发
文章平均质量分 73
evenness
http://hi.youkuaiyun.com/cp.php?ac=task&op=do&taskid=7
展开
-
i节点(inode)和文件描述符(file descriptor)的区别和联系
inode 或i节点是指对文件的索引。如一个系统,所有文件是放在磁盘或flash上,就要编个目录来说明每个文件在什么地方,有什么属性,及大小等。就像书本的目录一样,便于查找和管理。这目录是操作系统需要的,用来找文件或叫管理文件。许多操作系统都用到这个概念,如linux, 某些嵌入式文件系统等。当然,对某个系统来说,有许多i节点。所以对i节点本身也是要进行管理的。 在linux中,内核通过转载 2012-03-19 14:25:15 · 1156 阅读 · 0 评论 -
Nor flash 驱动和移植
开发板上只有Nor Flash,所以为了实现层次文件系统,需要为Linux2.6.20增加Nor Flash MTD驱动支持。其实工作量并不大,因为已经有现成的程序可供参考。 MTD的驱动程序都集中在drivers/mtd里面。我们需要做的,仅仅是在drivers/mtd/maps下增加自己的分区表。因为有参考的代码,所以比较容易。 (1)构建配置选项转载 2012-06-18 14:47:07 · 923 阅读 · 0 评论 -
Linux 内核配置系统浅析
随着 Linux 操作系统的广泛应用,特别是 Linux 在嵌入式领域的发展,越来越多的人开始投身到 Linux 内核级的开发中。面对日益庞大的 Linux 内核源代码,开发者在完成自己的内核代码后,都将面临着同样的问题,即如何将源代码融入到 Linux 内核中,增加相应的 Linux 配置选项,并最终被编译进 Linux 内核。这就需要了解 Linux 的内核配置系统。转载 2012-06-18 09:38:04 · 761 阅读 · 0 评论 -
驱动printk
用printk,内核会根据日志级别,可能把消息打印到当前控制台上,这个控制台通常是一个字符模式的终端、一个串口打印机或是一个并口打印机。这些消息正常输出的前提是──日志输出级别小于console_loglevel(在内核中数字越小优先级越高)。 没有指定日志级别的printk语句默认采用的级别是 DEFAULT_ MESSAGE_LOGLEVEL(这个默认级别一般为,即与KERN_WAR转载 2012-06-29 13:42:49 · 1182 阅读 · 0 评论 -
ata驱动框架
这里所说的ATA Disk包含两大类:一类是传统的并行ATA(PATA),即IDE接口;另一类是目前流行的串行ATA(SATA)。对于IDE的驱动,Linux-2.6.28还进行了保留,其可以驱成传统的HD设备,也可以驱成流行的SD设备。对于SATA设备,Linux的标准做法是驱成SD设备,下面对传统ATA的驱动架构和目前流行ATA的驱动架构进行对比分析说明。 传统AT转载 2012-09-17 16:39:34 · 5108 阅读 · 0 评论 -
kernle booting log
ralph> bootm 0x800000 0x1000000## Booting image at 00800000 ... Image Name: Linux-2.6.24.2 Created: 2009-01-23 20:10:42 UTC Image Type: PowerPC Linux Kernel Image (gzip compre原创 2012-10-29 15:23:21 · 1655 阅读 · 0 评论 -
浅谈 Linux 内核开发之网络设备驱动
网络设备介绍网络设备是计算机体系结构中必不可少的一部分,处理器如果想与外界通信,通常都会选择网络设备作为通信接口。众所周知,在 OSI(Open Systems Interconnection,开放网际互连)中,网络被划分为七个层次,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用 层。我们所讲的网络设备也包括两个层次,一层叫做 MAC(Media Access Co转载 2012-11-02 14:55:16 · 841 阅读 · 0 评论 -
实例解析linux内核I2C体系结构(2)
四、在内核里写i2c设备驱动的两种方式前文介绍了利用/dev/i2c-0在应用层完成对i2c设备的操作,但很多时候我们还是习惯为i2c设备在内核层编写驱动程序。目前内核支持两种编写i2c驱动程序的方式。下面分别介绍这两种方式的实现。这里分别称这两种方式为“Adapter方式(LEGACY)”和“Probe方式(new style)”。(1) Adapter方式(LEGACY)(下面的实转载 2013-01-29 13:19:34 · 542 阅读 · 0 评论 -
linux RTC 驱动模型分析
RTC(real time clock)实时时钟,主要作用是给Linux系统提供时间。RTC因为是电池供电的,所以掉电后时间不丢失。Linux内核把RTC用作“离线”的时间与日期维护器。当Linux内核启动时,它从RTC中读取时间与日期,作为基准值。在运行期间内核完全抛开RTC,以软件的形式维护系统的当前时间与日期,并在需要时将时间回写RTC芯片。另外如果RTC提供了IRQ中断并且可以定时,那么R转载 2013-01-29 09:42:23 · 550 阅读 · 0 评论 -
用I2C tools來檢查CODEC裡register的值
在處理音訊相關的問題時,我通常會找個方法來讀寫codec中register的值。幸好linux上也有這樣的工具 – i2c tools。先到lm-sensors下載soure code,然後cross compile成arm的執行檔,就可以放到板子來試試看了。i2c-tools中含有四個執行檔i2cdetect – 用來列舉I2C bus和上面所有的裝置 i2cdump – 顯示裝置上转载 2013-04-12 17:05:56 · 1133 阅读 · 0 评论 -
设备文件系统剖析与使用 udev mdev devfs
一、什么是Linux设备文件系统首先我们不看定义,定义总是太抽象很难理解,我们先看现象。当我们往开发板上移植了一个新的文件系统之后(假如各种设备驱动也移植好了),启动开发板,我们用串口工具进入开发板,查看系统/dev目录,往往里面没有或者就只有null、console等几个系统必须的设备文件在这儿外,没有任何设备文件了。那我们移植好的各种设备驱动的设备文件怎么没有啊?如果要使用这些设备,那不是转载 2013-05-16 10:33:16 · 872 阅读 · 0 评论 -
内核编译配置
1) 下载kernel并解压2) vim Makefile,添加如下两行ARCH=armCROSS_COMPILE=/usr/local/arm/3.3.2/bin/arm-linux-3) 配置:make menuconfig 或者使用默认的一个开发板配置在它的基础上修改 例:make s3c2410_defconfig4) make zImage转载 2013-07-01 13:56:53 · 695 阅读 · 0 评论 -
linux页表创建与更新
简单来说,讨论linux页表就是讨论linux进程的的页表:linux页表的创建与更新都包含于进程的创建与更新中。当前的linux内核采用的是写时复制方法,在创建一个linux进程时,完全复制父进程的页表,并且将父子进程的页表均置为写保护(即写地址的时候会产生缺页异常等)。那么父子进程谁向地址空间写数据时,产生缺页异常,分配新的页,并将两个页均置为可写,按照这种方式父子进程的地址空间渐渐变得不同。转载 2012-06-12 17:17:36 · 9498 阅读 · 0 评论 -
系统调用,及手动添加自己的系统调用
说明: 系统调用是内核和应用程序间的接口,应用程序要访问硬件设备和其他操作系统资源,必须通过系统调用来完成。 在linux中,系统调用是用户空间访问内核的唯一手段,除异常和中断外,他们是内核唯一>的合法入口。系统调用的数量很少,在i386上只有大概300个左右。 应用程序员通过C库中的应用程序接口(API)而不是直接通过系统调用来编程。 C库中的函数可以不调转载 2012-06-12 11:15:39 · 2899 阅读 · 0 评论 -
linux Kernel中断处理流程
Kernel 中断处理图1. Linux 定义了名字为irq_desc 的中断例程描述符表:(include/linux/irq.h) struct irqdesc irq_desc[NR_IRQS];NR_IRQS 表示中断源的数目。 include/asm/irq.h中定义了各中断号。2. irq_desc []是一个指向irq_desc_t 结构的数组, irq转载 2012-05-23 13:27:21 · 757 阅读 · 0 评论 -
ramdisk
ramdisk一个作用就是用来解决boot过程中mount根文件系统的“先有鸡还是先有蛋”的问题的。一般来说,根文件系统在形形色色的存储设备上,不同的设备又要不同的硬件厂商的驱动,比如intel的南桥自然需要intel的ide/sata驱动,VIA的南桥需要VIA的ide/sata驱动,根文件系统也有不同的文件系统的可能,比如ubuntu发行版可能一般用ext3,suse可能就不是了,不同的文转载 2012-04-26 18:32:01 · 814 阅读 · 0 评论 -
e1000驱动分析
linux 模块分析入口:module init 函数【2.6.31】1 设备发现过程static int __init e1000_init_module(void){int ret;printk(KERN_INFO "%s: Intel(R) PRO/1000 Network Driver - %s\n",e1000e_driver_name, e1000e_drive转载 2012-05-02 16:52:01 · 3948 阅读 · 0 评论 -
网络子系统在链路层的收发过程剖析(二)
4),数据包的接收 * Incoming packets are placed on per-cpu queues so that * no locking is needed. */struct softnet_data{ struct net_device *output_queue; struct sk_buff_head转载 2012-05-04 15:54:39 · 778 阅读 · 0 评论 -
网络子系统在链路层的收发过程剖析(三)
(4),poll函数NON—NAPI方式: 这种方式对应该的poll函数为process_backlog: struct softnet_data *queue = &__get_cpu_var(softnet_data); for (;;) { local_irq_disable();转载 2012-05-04 15:55:16 · 899 阅读 · 0 评论 -
网络子系统在链路层的收发过程剖析(四)
5),数据包的发送 数据包的发送为接收的反过程,发送过程较之接收过程的复杂性在于它有一个流量控制层(Trafficing Control Layer),用于实现QoS,但不是本文关注的目标。 (1),__netif_schedule ()当内核有数据包等待发送时,它会间接调用__netif_schedule ()去处理这些数据包: void __netif转载 2012-05-04 15:55:52 · 1287 阅读 · 0 评论 -
网络子系统在链路层的收发过程剖析(一)
1),Skb_buff/* To allow 64K frame to be packed as single skb without frag_list */#define MAX_SKB_FRAGS (65536/PAGE_SIZE + 2)typedef struct skb_frag_struct skb_frag_t;struct skb_frag_str转载 2012-05-04 15:53:42 · 1245 阅读 · 0 评论 -
preempt_count详解
当从内核态返回到用户态的时候,要检查是否进行调度,而调度要看两个条件:1.preempt_count是否为02.rescheduled是否置位 ret_from_exception: preempt_stop(CLBR_ANY)ret_from_intr: GET_THREAD_INFO(%ebp)check_userspace: mov转载 2012-06-01 17:22:30 · 9109 阅读 · 0 评论 -
linux软中断机制
中断服务程序往往都是在CPU关中断的条件下执行的,以避免中断嵌套而使控制复杂化。但是CPU关中断的时间不能太长,否则容易丢失中断信号。为此, Linux将中断服务程序一分为二,各称作“Top Half”和“Bottom Half”。前者通常对时间要求较为严格,必须在中断请求发生后立即或至少在一定的时间限制内完成。因此为了保证这种处理能原子地完成,Top Half通常是在CPU关中断的条件下执行的。转载 2012-06-07 17:00:18 · 1593 阅读 · 0 评论 -
Intel e1000 网卡
参考资料:1。Intel 82547 网卡开发手册。其他Intel网卡的手册应该也可以从网上下载到。http://linux.chinaunix.net/bbs/thread-1142051-1-2.html2。Linux e1000网卡驱动。http://lxr.linux.no/#linux+v2.6.30/drivers/net/e1000/e1000_main.c3。C转载 2012-05-18 11:59:00 · 10607 阅读 · 0 评论 -
Linux中Workqueue机制分析
什么是workqueue?Linux中的Workqueue机制就是为了简化内核线程的创建。通过调用workqueue的接口就能创建内核线程。并且可以根据当前系统CPU的个数创建线程的数量,使得线程处理的事务能够并行化。workqueue是内核中实现简单而有效的机制,他显然简化了内核daemon的创建,方便了用户的编程。Workqueue机制的实现Workqueu转载 2012-06-07 15:14:55 · 2938 阅读 · 0 评论 -
Linux内存管理(上)
摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存地使用方法。力求从外自内、水到渠成地引导网友分析Linux地内存管理与使用。在本章最后我们给出一个内存映射地实例,帮助网友们理解内核内存管理与用户内存管理之间地关系,希望大家最终能驾驭Linux内存管理。 原文:http://blog.youkuaiyun.com/kanghua/ar转载 2012-06-08 16:56:40 · 556 阅读 · 0 评论 -
Linux内存管理(下)
原文:http://blog.youkuaiyun.com/kanghua/article/details/1837876物理内存管理(页管理)Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数4k(在i386体系结构中)大小页,从而分配和回收内存的基本单位便是内存页了。利用分页管理有助于灵活分配内存地址,因为分配时不必要求必须有大块的连续内存[1],系统可以东一页、西一页的凑转载 2012-06-08 16:58:46 · 538 阅读 · 0 评论 -
关于asmlinkage
http://blog.youkuaiyun.com/skywalkzf/archive/2009/12/24/5068966.aspx 什么是 "asmlinkage"?相信大家在看linux的source code的时候,都会注意到asmlinkage这个宏,它是用来做什么的呢?The asmlinkage tag is one other thing that we转载 2012-06-11 17:40:01 · 639 阅读 · 0 评论 -
Linux Debug Filesystem的使用
在进行系统调试的时候,有可能会使用到debug file system。下面讲解如何具体使用debug file system1. 在kernel中使用debug file system make menuconfig --> Kernel hacking --> 选中Debug Filesystem (CONFIG_DEBUG_FS)选项。 make menuconf转载 2013-09-24 09:54:33 · 1808 阅读 · 0 评论