自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

转载 IO端口和IO内存

在驱动程序编写过程中,很少会注意到IO Port和IO Mem的区别。虽然使用一些不符合规范的代码可以达到最终目的,这是极其不推荐使用的。结合下图,我们彻底讲述IO端口和IO内存以及内存之间的关系。主存16M字节的SDRAM,外设是个视频采集卡,上面有16M字节的SDRAM作为缓冲区。1.     CPU是i386架构的情况在i386系列的处理中,内存和外部IO是独立编

2012-03-31 15:14:06 303

转载 驱动案例一:mini2440 LED驱动 (用ioremap实现访问CPU寄存器)

I/O 内存访问流程:1. request_mem_region()  申请IO内存2.ioremap() 将物理地址映射到虚拟地址3.ioread8() 、ioread16()、ioread32()、iowrite8()、iowrite16()、iowrite32() 读写4.iounmap() 释放虚拟内存5.release_mem_region() 释放IO内存注意:

2012-03-31 11:13:18 648

转载 *restrict 功能

restrict是c99标准引入的,它只可以用于限定和约束指针,并表明指针是访问一个数据对象的唯一且初始的方式.即它告诉编译器,所有修改该指针所指向内存中内容的操作都必须通过该指针来修改,而不能通过其它途径(其它变量或指针)来修改;这样做的好处是,能帮助编译器进行更好的优化代码,生成更有效率的汇编代码.如 int *restrict ptr, ptr 指向的内存单元只能被 ptr 访问到,任何同样

2012-03-29 08:38:20 613

原创 sysfs: cannot create duplicate filename '/devices/virtual/misc/leds'问题处理

在mini2440平台下加载LED驱动模块出现以下错误:[root@FriendlyARM 5-3-2]# insmod mini2440_leds_misc.ko  WARNING: at fs/sysfs/dir.c:491 sysfs_add_one+0x88/0xb0()sysfs: cannot create duplicate filename '/devices/virt

2012-03-28 11:17:22 7799 3

转载 建立内核模块编译环境

驱动开发使用的是mini2440的开发板,linux内核版本为linux-2.6.32.2首先解压linux源码,拷贝配置文件cp -f config_mini2440_w35 .config (否则会出现version magic '2.6.30.4 mod_unload modversions ARMv5 ' should be '2.6.30'的版本错误)Make cle

2012-03-27 17:39:14 812

转载 构建linux根文件系统 (支持EABI)

平台工具及其版本 宿主机: Windows xp;Vmware7.1.3build-324285;虚拟机Ubuntu10.10目标平台:工装(s3c2440处理器)256M Nand Flash,64M SDRAM,2MNOR Flash交叉开发环境:arm-linux-xxx-4.3.2,支持EABIlinux kernel版本:2.6.37Busybox版本:busybox

2012-03-19 14:39:50 1893

原创 4.3.2编译器重编译linux2.6.37 (支持EABI)流程及问题记录

平台工具及其版本 宿主机: Windows xp;Vmware7.1.3build-324285;虚拟机Ubuntu10.10目标平台:工装(s3c2440处理器)256M Nand Flash,64M SDRAM,2MNOR Flash交叉开发环境:arm-linux-xxx-4.3.2,支持EABIlinux kernel版本:2.6.37因使用3.4.1交叉编译环境编译应

2012-03-19 14:38:56 775

转载 volatile的功能及应用

volatile关键字是一种类型修饰符,用它声明的类型变量表示可以被某些编译器未知的因素更改,比如:操作系统、硬件或者其它线程等。遇到这个关键字声明的变量,编译器对访问该变量的代码就不再进行优化,从而可以提供对特殊地址的稳定访问。精确地说就是,系统每次用到此变量的时候都是直接从对应的内存当中读取,而不会利用cache当中的原有数值,以适应它的未知何时会发生的变化。使用该关键字的例子如下:

2012-03-19 14:38:21 495

转载 arm-linux-gdb 交叉编译工具的安装使用

1、arm-linux-gcc    每一种硬件都有其对应的最好的编译工具,并不是最新的最好。其实思想很简单,就是在宿主机(PC)上编译目标板子上运行的程序。所以工具链要用目标板的,这样去编译生成可执行的二进制文件。这里有一个工具制作工具链,http://www.kegel.com/crosstool/。虽然它可以自动下,还是先下好吧自己,那个速度,呵呵。2、arm-linux-gdb

2012-03-19 14:37:41 6214

原创 ubuntu10.10下安装Kdevelop4.0

一、安装KDevelop:   使用apt-get可以很容易的得到KDevelop,具体如下: 1). apt-get install kdevelop 2). 如果你无法获取这些软件包的信息,可以尝试修改/etc/apt/sources.lst,修改后  别忘了执行apt-get update更新包索引。二、安装工具包:  使用apt-get install语句安

2012-03-19 14:36:50 1012

转载 Ubuntu 10.10下配置NFS并挂载共享目录到目标板

1、安装NFS在Ubuntu下面安装nfs,输入命令:#apt-get install nfs-kernel-server#apt-get install nfs-common安装nfs-kernel-server的时候系统会自动下载另外一个包portmap2、配置nfs配置文件是/etc/exports,主要是设置服务器的共享目录以及权限的,#sudo vim /et

2012-03-19 14:36:07 779

原创 目标板设置nfs文件开机挂载及脚本挂卸载

一、脚本设置nfs文件挂卸载,脚本内容如下:#programe:#mount or umount Ubuntu10.10 nfs folder /work#History#2012.02.17  klutz first releasePATH=/sbin:/usr/sbin:/bin:/usr/binexport PATHread -p "mount or umou

2012-03-19 14:35:04 474

原创 arm-linux-gcc半字处理编译参数

在Ubuntu10.10环境下使用arm-linux-gcc 3.4.1调试16位总线LCD屏的时候遇到问题:向总线上写数据时,无法成功赋值。在执行一条总线赋值语句时,从示波器观察nGCS1片选时,发现该信号连续2次低电平有效。将该赋值语句反汇编代码列出:arm-linux-gcc 3.4.1编译代码反汇编结果:C赋值语句:*(volatile unsigned short*)lc

2012-03-19 14:34:16 557

转载 Linux GPIO驱动相关笔记

打算跟着友善之臂的《mini2440 linux移植开发指南》来做个LED驱动,虽然LED的原理简单得不能再简单了,但是要把kernel中针对于s3c24**的GPIO的一些数据结构,还有函数搞清楚也不是那么轻松的事,所以本文主要简单地说明下LED驱动中的相关数据结构以及函数/宏的定义,并对驱动加以验证 *******************************************

2012-03-19 14:31:37 674

转载 put_user & get_user

1. put_userName put_user --    Write a simple value into user space.Synopsis put_user( x, ptr); Arguments x Value to copy to user space. ptr Destination address,

2012-03-16 15:52:02 3110

转载 对于struct file_operations中ioctl消失的学习笔记

当年看《LDD3》的时候已经注意到了书中对ioctl的评价不是很好:“ioctl调用的非结构化本质导致众多内核开发者倾向于放弃它。” ,而在这次阅读3.0代码的时候,这个成员在struct file_operations中早已消失了。这个激起了我学习的兴趣,以下是对这个ioctl的学习小结:1、消失的确切时间    ioctl的消失到底是从哪个版本开始的?网上给出的时间是2.6.36开

2012-03-16 14:48:10 464

转载 error: unknown field ‘ioctl’ specified in initializer

异步通知的意思是:一旦设备就绪,则主动通知应用程序,这样应用程序就根本不需要查询设备的状态,这一点非常类似于硬件上的“中断”的概念,比较准确的称谓是“信号驱动的异步I/O”。信号是在软件层次上对中断机制的一种模拟,在原理上一个进程接收到一个信号与处理器接收到一个中断请求是一样的。1>在把驱动从2.6.32 移植到2.6.36时 报错 /home/kern

2012-03-16 10:58:08 785

转载 cdev_alloc与cdev_init与cdev_add

内核中每个字符设备都对应一个 cdev 结构的变量,下面是它的定义:linux-2.6.22/include/linux/cdev.hstruct cdev {struct kobject kobj;          // 每个 cdev 都是一个 kobjectstruct module *owner;       // 指向实现驱动的模块const struct file

2012-03-15 17:00:53 503

转载 cdev_alloc与cdev_init区别

通过cdev_alloc的代码可以看出,它主要完成了空间的申请和简单的初始化操作;[cpp] view plaincopyprint?void cdev_init(struct cdev *cdev, const struct file_operations *fops)  {      memset(cdev, 0, sizeof *cdev);      INIT_

2012-03-15 16:53:48 88

转载 rmmod: chdir(/lib/modules): No such file or directory 解决方法

使用rmmod会出现 rmmod : chdir(/lib/modules): No such file or directory ? 现在的内核模块在插入卸载时都会要转到 “/lib/modules/内核版本号/ ” 这个目录里。所以只要建立这个目录就行了。在目标板执行#mkdir -p /lib/modules/$(uname -r)较新版本的busybox 1.13.

2012-03-14 08:59:05 7175

转载 驱动模块编译错误提示--implicit declaration of function ‘kmalloc’

编译一个驱动测试模块出现如下编译错误,make: Entering directory `/usr/src/kernels/2.6.35.6-45.fc14.i686'  CC [M]  /home/ty/development/driver/ch6/globalmem.o/home/ty/development/driver/ch6/globalmem.c: In function

2012-03-14 08:52:51 750

转载 hello: module license 'unspecified' taints kernel.错误--编写内核模块意见

为了后续学习的顺利进行,我们利用最简单的helloworld程序,在内核上挂载和卸载我们自己编写的hello模块。一、编写hello.c文件利用vi编辑器,我们键入下面的代码,并保存为hello.c文件。/*** hello.c*     ------Test for kernel module*/#i nclude           #i nclude

2012-03-14 08:51:06 920

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除