linux_driver
linxi_hnh
这个作者很懒,什么都没留下…
展开
-
对于驱动调试有用的两个小工具(devmem2、devkmem)具体工具见邮件附件(20121007)
前段时间一个学习Linux的朋友问我:“可不可以在调试设备驱动的时候,利用一个小工具来查看CPU中寄存器的值?”我当时对他说:“一般都是Printk打印出来的。”后来这个朋友自己去找了资料告诉我:好像用/dev/mem可以实现。后来我自己找了以下相关的资料,发现正好是我当年没有继续学习的《LDD3》的《第十五章 内存映射和DMA》是知识,惭愧惭愧阿~~~~~ 后来我开始学习了一下转载 2012-10-07 18:09:19 · 423 阅读 · 0 评论 -
linux platform 架构说明
1 针对struct platform_device结构体,其名字对用的是 /sys/devices/platform/下的目录名。2 举例如下: 620 struct platform_device ns115_hdmi_device = { 621 .name = "ns115-soc-hdmi",转载 2013-01-25 11:33:02 · 383 阅读 · 0 评论 -
sys文件系统下的接口函数
有很多的文章组合而成:说到sys接口文件,就不得不说“ DEVICE_ATTR”在介绍 DEVICE_ATTR之前,先介绍两个函数:1 ssccanf()函数:char buf[512] ;sscanf("123456 ", "%s", buf);//此处buf是数组名,它的意思是将123456以%s的形式存入buf中!printf("%s\n", buf原创 2013-01-25 11:55:04 · 639 阅读 · 0 评论 -
中断处理函数
1 想看一下中断的信息可以通过如下命令操作: cat /proc/interrupt/ 其中第一列之中断号,后面的是中断次数,在后面的是名字; CPU0 CPU1 CPU2 CPU3 0: 132 0 0 0 IO-API原创 2013-01-28 17:57:19 · 839 阅读 · 0 评论 -
Linux中__init、__devinit等初始化宏
内核使用了大量不同的宏来标记具有不同作用的函数和数据结构。如宏__init 、__devinit 等。这些宏在include/linux/init.h 头文件中定义。编译器通过这些宏可以把代码优化放到合适的内存位置,以减少内存占用和提高内核效率。下面是一些常用的宏:· __init ,标记内核启动时使用的初始化代码,内核启动完成后不再需要。以此标记的代码位于.init.text转载 2013-01-28 17:09:17 · 893 阅读 · 0 评论 -
linux 网络命令
echo "nameserver 211.98.1.28">> /etc/resolv.confifconfig eth0 192.168.22.23route add default gw 192.168.22.1ifconfig eth59 192.168.22.47 netmask 255.255.255.0 upnameserver 202.106.0.20ro原创 2013-01-09 20:11:44 · 403 阅读 · 0 评论 -
linux sys
1 耳机: cat /sys/class/switch/h2w/state2 bcm wifi: wl_4330 rate; wl_4330 rssi 测试信号。原创 2013-01-16 11:22:36 · 465 阅读 · 0 评论 -
phys_to_virt(),ioreamp(),IO_ADDRESS() 的区别
针对IO_ADDRESS()函数(静态映射(map_desc)方式):ioreamp();动态映射方式:我们来看看s3c2410是怎么定义map_desc结构体的(即上面s3c2410_map_io函数内的s3c2410_iodesc)。/* arch/arm/mach-s3c2410/s3c2410.c */static struct map_desc原创 2013-01-16 14:07:46 · 1510 阅读 · 0 评论 -
对Linux内核中进程上下文和中断上下文的理解
作者:杨硕,华清远见嵌入式学院讲师。内核空间和用户空间是操作系统理论的基础之一,即内核功能模块运行在内核空间,而应用程序运行在用户空间。现代的CPU都具有不同的操作模式,代表不同的级别,不同的级别具有不同的功能,在较低的级别中将禁止某些操作。Linux系统设计时利用了这种硬件特性,使用了两个级别,最高级别和最低级别,内核运行在最高级别(内核态),这个级别可以进行所有操作,而应用程序运行在较转载 2013-01-18 21:22:59 · 334 阅读 · 0 评论 -
linux mem layout
具体看linux内核下的Doc/arm/memory.txt文档原创 2013-01-22 15:00:31 · 400 阅读 · 0 评论 -
linux 虚拟内存管理
关于虚拟内存管理的基本内容参看相关内容,在此不再赘述,在理论的基础上,设计出合理的实验可以强化对理论的理解和应用能力————————————————————————————————–实验内容:在proc 文件系统下,建立一个文件,每次向这个文件写人字符时,调用相应的虚拟内存处理函数/*mtest_dump_vma_list():打印出当前进程的各个VMA,这个功能我们简转载 2013-01-22 15:07:15 · 783 阅读 · 1 评论 -
内存管理MMU实例分析
0、MMU概述1、地址变换过程2、访问权限3、高速缓存4、程序实例 0、MMU概述 内存管理单元(Memory Management Unit)简称MMU,它负责虚拟地址到物理地址的映射,并提供硬件的内存访问权限检查。 运行大型操作系统的平台,一般都采用MMU进行内存管理 但对于带MMU的系统来说,内存中页命中率和换入换出所耗费的时间严转载 2013-01-22 15:15:22 · 715 阅读 · 0 评论 -
/sys/class/gpio 文件接口操作IO端口(s3c2440)
在嵌入式设备中对GPIO的操作是最基本的操作。一般的做法是写一个单独驱动程序,网上大多数的例子都是这样的。其实linux下面有一个通用的GPIO操作接口,那就是我要介绍的 “/sys/class/gpio” 方式。首先,看看系统中有没有“/sys/class/gpio”这个文件夹。如果没有请在编译内核的时候加入 Device Drivers —> GPIO Support —>转载 2012-12-20 23:57:50 · 847 阅读 · 0 评论 -
调试lcd显示
今天又一次调试lcd显示了。是在原来显示的基础上增加了显示分辨率。1 首先要高清楚的分辨率所对应的pclk是多少?? 1280x720p的一般是74.25Mx22 接着设置lcd屏的timing; hfrontporch 对应的是left参数 hbackporch 对应的是right参数 hsy原创 2012-11-23 13:31:22 · 803 阅读 · 0 评论 -
linux clk的使用
1 先是struct clk *clk; clk = clk_get(NULL, CLK_ID);2 clk_enable(clk);3 clk_set_rate(clk, CLK_RATE);原创 2012-10-08 11:31:39 · 663 阅读 · 0 评论 -
Linux-2.6 16c550 串口驱动移植
本文中将要说道的是Linux驱动移植中最为初级最为简单的一种,就是通用性很强的UART设备驱动的移植,当然这还不能完全满足博主我这可怜的智商。我所移植的这个驱动不是别的就是可以使用已有驱动8250.c来驱动的16c550, 千万别笑话我,谁叫这是第一次呢。其实说到底我也没干什么,就是配置了一些参数而已,剩下的就都交给platform和8250了。下面就是重要的结构体的配置具转载 2012-10-09 11:15:25 · 1855 阅读 · 0 评论 -
打开ev_dbg的log信息
需要两个步骤:1 打开调试开关: 你调试的文件中必然包含了,或者《linux /paltforam_device.h》,后者包含了前者,在包含此头文件之前,使用#define DEBUG 1 来打开调试开关:例如 #include #include #include #include #define DEBUG 1 #inc转载 2012-10-10 16:37:17 · 729 阅读 · 0 评论 -
实验终于成功了,copy_to_user() && copy_from_user()
//纠结了两天后,关于这两个函数的实验终于有点成就感了,网上关于这两个函数的用法说法不一,有人说使用前需要检查buf是否//可用。急于实验的我参考了多种方案,结果还是没有成功。最后觉得还是很需要了解这两个函数的原型,以及file_operations的定//义。通过查看源文件了解到这两个函数已经检查了buf是否可用,以及进一步了解了file_operations结构,实验发现原来转载 2012-10-16 13:19:10 · 2435 阅读 · 0 评论 -
[有關 Cache 的 read/write through/back/allocate 的意義]
[有關 Cache 的 read/write through/back/allocate 的意義]所謂的read/write cache的hit/miss,指的是CPU要read/write某一位址的資料,若此時cache裡的資料剛好是該位址的資料,則稱為cache hit,若此時cache裡的資料不是該位址的資料,則稱為cache miss。A. [Read]----转载 2012-10-31 11:36:21 · 880 阅读 · 0 评论 -
进程上下文与中断上下文
上下文context:上下文简单说来就是一个环境,相对于进程而言,就是进程执行时的环境。具体来说就是各个变量和数据,包括所有的寄存器变量、进程打开的文件、内存信息等。 一个进程的上下文可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。 用户级上下文: 正文、数据、用户堆栈以及共享存储区; 寄存器上下文: 通用寄存器、程序寄存器转载 2012-10-24 14:26:43 · 530 阅读 · 0 评论 -
进程和线程
进程是程序的一次执行,线程可以理解为进程中的执行的一段程序片段。在一个多任务环境中下面的概念可以帮助我们理解两者间的差别: 进程间是独立的,这表现在内存空间,上下文环境;线程运行在进程空间内。 一般来讲(不使用特殊技术)进程是无法突破进程边界存取其他进程内的存储空间;而线程由于处于进程空间内,所以同一进程所产生的线程共享同一内存空间。 同一进转载 2012-10-24 15:21:03 · 779 阅读 · 0 评论 -
内核通知链机制的原理及实现
这篇文章是对以下两位博主的文章进行了简单整理转载引用,备忘。非常感谢两位的分享。http://my.chinaunix.net/space.php?uid=25445243&do=blog&id=212959http://yfydz.cublog.cn 一、概念: 大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生的事件感兴趣。为了满足转载 2012-10-24 13:48:13 · 426 阅读 · 0 评论 -
sd card 识别流程
SetClk 400=200000/499CMD0: 0x00000000, ARG: 0x00000000 SRS12=0x0 SRS09=0x1ff0000 Info @L99 CMD8: 0x081a0000, ARG: 0x000001aa SRS12=0x0 SRS09=0x1ff0000 Info @L99 resp48 [0]=0x1aaCMD55原创 2012-11-03 13:17:03 · 2247 阅读 · 1 评论 -
arm ds-5 调试内核
调试mmc打开之前的代码:1 停止代码运行,设置一个硬断点。这个硬断点是uboot的入口地址。 hbreak *0x800080002 在uboot的命令行里面运行如下命令: run bootcmd3 点击运行按钮,停止在0x80008000处,再运行一次,则会再次在0x80008000处停下。4 在命令行输入如下命令,因为在加载kernel之前必须先disable原创 2012-10-26 15:20:06 · 2015 阅读 · 0 评论 -
uboot 移植到最新的2013上
1 interrupt.c 文件,在新的uboot里面已经定义了很多函数,路径在arch/arm/lib/interrupts.c里面2 关于cpu的register map都在include/asm/arch-xxx/cpu.h中定义原创 2012-11-10 14:13:10 · 338 阅读 · 0 评论 -
linux 内核驱动编程 简单例子 与_IO, _IOR, _IOW, _IOWR 宏解析
一、_IO, _IOR, _IOW, _IOWR 宏的用法与解析在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值。cmd除了可区别数字外,还包含有助于处理的几种相应信息。 cmd的大小为 32位,共分 4 个域:bit31~bit30 2位为 “区别读写” 区,作用是区分是读取命令还是写入命令。bit29~bit15 14位为转载 2013-01-22 16:52:31 · 483 阅读 · 0 评论