文章分类 - 驱动类
摘要:Firmware加载原理分析前言前段时间移植wifi驱动到android的内核上,发现firmware的加载始终出错,问了几个人,都不是很了解,没办法,只好自己研究一下。原理分析从本质上来说,firmware需要做的事情包括两件:1,通知用户态程序,我需要下载firmware了;2,用户态程序把用户态的数据copy到内核层;3,内核把内核态的数据写到设备上,比如wifi模块里;其中第三步应该不难,关键是看看,linux里面是如何实现第一、二步的;实现机制简单的说,它的机制分成以下几部分:1,通过一定的方式,通知用户态程序,比如init程序,如图所示:显然是通过kobject_uevent的方式
        阅读全文
                
摘要:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处、作者信息和本声明。否则将追究法律责任。http://buaadallas.blog.51cto.com/399160/394350在Android中,由于没有mdev和udev,所以它没有办法动态的生成设备节点,那么它是如何做的呢?我们可以在system/core/init/下的init.c和devices.c中找到答案:init.c中intmain(intargc,char**argv){.../*Getthebasicfilesystemsetupweneedput*togetherintheinitramdiskon/andt
        阅读全文
                
摘要:顺便罗列一下内核启动流程:/arch/arm/boot/compressed/head.S:Start:Decompressed_kernel() //在/arch/arm/boot/compressed/misc.c 中Call_kernel()Stext:/init/main.cStart_kernel()Setup_arch()…Rest_init()Init()Do_basic_setup()Prepare_namespace()看到了这里,我已激动得说不出话了,因为来到我与挂载根文件系统最重要的接口函数。/* This is a non __init function. Force 
        阅读全文
                
摘要:current 指针指向当前在运行的进程,内核代码可以通过使用 current 来使用进程特定的信息。指向 task_struct 的current指针在内核堆栈内,是一个全局项。为什么要用?查看当前谁在使用内核你关心的那段代码的时候。怎么用?printk(KERN_INFO"Thecuurentprocesscommond:\"%s\"thepid:%i\n",current->comm,current->pid);comm:当前进程执行的程序文件名,pid:当前进程的pid号。
        阅读全文
                
摘要:1. History about mountd and vold. a.in older version, Android use mountd daemon to manage SD card.b.from cupcake version, vold is used.from the cupcake source code, there is mountd folder in /system/core source code.but from the Android.mk, we can see mountd is not built by default,and from the comm
        阅读全文
                
摘要:转载:http://blog.csdn.net/eastmoon502136/article/details/7909688 手机都是有震动的效果的,前天飞刀从手机里拆了一个振动器,然后让我下周把这个调一下,昨天来公司小试了一把,就搞定了。下面把过程讲一下吧。 其实android中已经做好了底层的驱动,那便是timed_gpio,就是把定时功能和gpio的功能结合在一起了,振动就是一个小直流电机了,当gpio口是高电平的时候,电机就转动了,当gpio口为低电平的时候,电机就不转了,而time是控制转的时间,也就是gpio口处于高电平的时间。 具体的代码就在/drivers/staging/..
        阅读全文
                
摘要:linux驱动3--安装kernel API的man手册 2012-08-08 09:40:49分类: LINUX参考:http://hi.baidu.com/handsoul/blog/item/eb2f59f11d55e8d90a46e0b2.html系统环境:ubuntu-10.04.1-desktop-i3861、下载一个内核源代码2、安装make mandocs的两个依赖:一个是xmlto,它的作用是:Convert xml to many other formats下载地址:http://download.chinaunix.net/download/0012000/11917.s
        阅读全文
                
摘要:SD卡驱动参考blog 2011-05-10 15:21:44分类:原文地址:SD卡驱动参考blog 作者:andyluo324324http://blog.csdn.net/lanmanck/archive/2009/12/03/4930089.aspx //SD卡驱动流程http://hi.baidu.com/396954504/blog/item/99aaac0ecfe97fc77bcbe1d5.html //sd 卡驱动在2.6内核的编写.sd/mmc/sdio kernel,sd/mmc/sdio 内核http://blogold.chinaunix.net/u3/97319/sho
        阅读全文
                
摘要:include/linux/stringify.h :[html] view plaincopy#ifndef__LINUX_STRINGIFY_H#define__LINUX_STRINGIFY_H/*Indirectstringification.Doingtwolevelsallowstheparametertobea*macroitself.Forexample,compilewith-DFOO=bar,__stringify(FOO)*convertsto"bar".*/#define__stringify_1(x...)#x#define__stringify(
        阅读全文
                
摘要:Android tp的虚拟按键处理现在在越来越多的Android的手机都是虚拟按键来操作,但是对于开发者来说可能会关心Android对虚拟按键如何处理的。对Linux熟悉的人可能会说,it's easy, 调用input_report_key()。OK,你说的没有错误,但是在android中,google让你对策略和驱动有了更加深入的了解。APP-------> Framework-------> Kernel-------> Hardware上面就是整个Android的Virtual key的整个的框图。由于是搞驱动的,所以这...
        阅读全文
                
摘要:关于中断处理程序中的关中断函数disable_irq和disable_irq_nosync (2012-05-24 13:53)标签: 转载原文地址:关于中断处理程序中的关中断函数disable_irq和disable_irq_nosync 作者:nanqihao2010年7月20日19:18:30 关于中断处理程序中的关中断函数disable_irq和disable_irq_nosyncdisable_irq关闭中断并等待中断处理完后返回, 而disable_irq_nosync立即返回. 那么在中断处理程序中应该使用哪一个函数来关闭中断呢?在<linux设备驱动开发详解>中的按
        阅读全文
                
摘要:大端小端转换,le32_to_cpu 和cpu_to_le32字节序http://oss.org.cn/kernel-book/ldd3/ch11s04.html小心不要假设字节序. PC 存储多字节值是低字节为先(小端为先, 因此是小端), 一些高级的平台以另一种方式(大端)工作. 任何可能的时候, 你的代码应当这样来编写, 它不在乎它操作的数据的字节序. 但是, 有时候一个驱动需要使用单个字节建立一个整型数或者相反, 或者它必须与一个要求一个特定顺序的设备通讯.包含文件 <asm/byteorder.h> 定义了或者 __BIG_ENDIAN 或者 __LITTLE_ENDIA
        阅读全文
                
摘要:文章来自:http://blog.chinaunix.net/u3/90973/showart_1925725.htmlU-boot会给Linux Kernel传递很多参数,如:串口,RAM,videofb等。而Linux kernel也会读取和处理这些参数。两者之间通过struct tag来传递参数。U-boot把要传递给kernel的东西保存在struct tag数据结构中,启动kernel时,把这个结构体的物理地址传给kernel;Linux kernel通过这个地址,用parse_tags分析出传递过来的参数。本文主要以U-boot传递RAM和Linux kernel读取RAM参数为例
        阅读全文
                
摘要:在我的印象中,input系统应该是将输入设备进行了抽象得到的一个统一的接口。常见的键盘,光鼠,轨迹球,传感器我们都可以归到input系统中来。编写一个input的基本的步骤是:1创建input device和driver1.0 一个简单的例子一个简单的例子是一个简单的I/O按键(BUTTON)。当一个按下或者释放的动都都会产生一个BUTTON_IRQ。[cpp] view plaincopy#include<linux/input.h>#include<linux/module.h>#include<linux/init.h>#include<asm/
        阅读全文
                
摘要:在上篇中有一个基本的input的设备的简介,这里我们在说一下input core相关的东东。先来个开胃菜,先看看struct input_dev[cpp] view plaincopystructinput_dev{constchar*name;//device的nameconstchar*phys;//设备的物理路径constchar*uniq;//设备唯一的id编码structinput_idid;//设备idunsignedlongevbit[BITS_TO_LONGS(EV_CNT)];//设备支持的events类型的bitmap(EV_KEY,EV_REL,etc)unsignedl
        阅读全文
                
摘要:head-common.S---具体做了哪些动作---跳转到init/main.c---bstart_kernel//关于start_kernel的强文深入理解linux内核,第八章main.casmlinkagevoid__initstart_kernel(void){char*command_line;externstructkernel_param__start___param[],__stop___param[];//来设置smpprocessid,当然目前看到的代码里面这里是空的smp_setup_processor_id();/**Needtorunasearlyaspossibl
        阅读全文
                
摘要:多线程执行的时候会出现并发的问题,处理不好,多线程会出现数据处理的错误。SMP(对称多处理器)和内核抢占是多线程执行的两个场景。我们提出要保护共享内核资源的问题,下面有内核中常用的方式。1、自旋锁和互斥体 首先先了解临界区的概念,临界区是访问共享资源的代码区域。自旋锁(spin lock)和互斥体(mutex, matual exclusion)是保护内核的两种基本的机制。 1)自旋锁可以确保在同一时刻只有一个线程进入临界区,其他想进入的则必须等待释放的到来,当然线程不是指的内核线程,而是执行的线程。[cpp] view plaincopy基本用法:#include<linux/spin
        阅读全文
                
摘要:转自:http://blog.csdn.net/skywalkzf/article/details/5277980近在寫Driver時,常常遇到需要「等待一段時間」再處理的動作,以往我都傻傻的用msleep()或mdelay(),殊不知這種busy waiting會hold住cpu資源,在這段期間內都無法讓給其他process執行,時間短(10ms以下等級)或許還可以,太長就不行了,所以需要 Kernel本身就有提供的「時序」機制來做處理,於是我漸漸學會了如何使用Timer、Tasklet和Workqueue的用法,在O'Reilly的Linux Device Drivers第七章有詳
        阅读全文
                
摘要:关机和重启在Linux Kernel中的哪些函数里实现。转自:http://blog.csdn.net/skywalkzf/article/details/5194427reboot的最终实现在arch_reset()函数,它通常定义在arch/arm/mach-xxx/include/mach/system.h里。system.h被ARM kernel的public code应用,因此你需要定义这个头文件,并实现它。arch_reset的函数原型为void arch_reset(char mode) void arch_reset(char mode) 关机需要将pm_power_off这个
        阅读全文
                
摘要:转自:http://blog.csdn.net/skywalkzf/article/details/4409034Linux系统提供了一种比信号量更好的同步机制,即completion,它用于一个执行单元等待另一个执行单元执行完某事。Linux系统中与completion相关的操作主要有以下4种: (1) 定义completion struct completion my_completion; (2) 初始化completion init_completion(&my_completion); 对my_completion的定义和初始化可以通过如下快捷方式实现 DECLEARE_CO
        阅读全文
                
                    
                
浙公网安备 33010602011771号