- 博客(50)
- 资源 (19)
- 收藏
- 关注
原创 io内存映射ioremap() 做点笔记
unsigned long GPBDAT,GPFDAT,GPGDAT;GPBDAT=(unsigned long )ioremap(0x56000014,4);GPFDAT=(unsigned long )ioremap(0x56000054,4);GPGDAT=(unsigned long )ioremap(0x56000064,4);switch(irq){
2010-05-25 20:11:00 952
原创 #define A (* (volatile unsigned long *) 详解
#define A (* (volatile unsigned long *) 0x48 ) // 8位处理#define A (* (volatile unsigned long *) 0x48000000) // 32位处理器对于不同的计算机体系结构,设备可能是端口映射,也可能是内存映射的。如果系统结构支持独立的IO地址空间,并且是端口映射,就必须使用汇编语
2010-05-25 20:10:00 754
转载 signal_pending(current)用法
signal_pending(current)检查当前进程是否有信号处理,返回不为0表示有信号需要处理。返回 -ERESTARTSYS 表示信号函数处理完毕后重新执行信号函数前的某个系统调用。也就是说,如果信号函数前有发生系统调用,在调度信号处理函数之前,内核会检查系统调用的返回值,看看是不是因为这个信号而中断了系统调用.如果返回值-ERESTARTSYS,并且当前调度的信号具
2010-05-25 18:41:00 4759
转载 __atribute__使用:关于_attribute__ ((used,__section__(".xxxx")))的理解
从etherboot代码中发现有一个__attribute__的使用,#define __pci_driver __attribute__ ((used,__section__(".drivers.pci")))/* Defined by the linker... */extern const struct pci_driver pci_drivers[];extern co
2010-05-25 18:40:00 8557
转载 内存与I/O访问
typedef void (*lpFunction) ();//定义一个无参数,无返回类型的函数指针类型//定义一个函数指针,指向cpu启动后所执行的第一条指令的位置lpFunction lpReset = (lpFunction)0xF000FFF0;lpReset();//调用函数 MMU停供虚拟地址和物理地址的映射、内存访问权限保护和Cache缓存控制等硬件支持。操作
2010-05-25 18:09:00 852
转载 转一转 怎么样学习驱动步骤
linux驱动开发学习的步骤 1. 学会写简单的makefile 2. 编一应用程序,可以用makefile跑起来 3. 学会写驱动的mak
2010-05-24 19:09:00 447
转载 从PC总线到ARM的内部总线 收藏
总线的演变首先应该讲讲总线的演变历史,这方面《PC架构系列:CPU/RAM/IO总线的发展历史!》这篇文章写得很好!感谢文章的作者!以下内容大量来自这篇文章,可以说是这篇文章的缩减转载。 公共总线早期PC中,CPU/RAM/IO都是挂在一条总线上,所有的部件都必须在同步的模式下工作。这样就带来一个"互锁" (locked to each ot
2010-05-21 15:00:00 892 2
转载 堆 栈 区别
一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局
2010-05-20 20:09:00 416
转载 _io _ior 笔记
_IO, _IOR, _IOW, _IOWR 宏的用法与解析在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值。cmd除了可区别数字外,还包含有助于处理的几种相应信息。 cmd的大小为 32位,共分 4 个域:bit31~bit30 2位为 “区别读写” 区,作用是区分是读取命令还是写入命令。bit
2010-05-19 18:05:00 631 1
转载 scull内存驱动
来自 http://dev.firnow.com/course/6_system/linux/Linuxjs/2008108/149162.html /* * scull.h -- definitions for the char module * * Copyright (C) 2001 Alessandro Rubini and Jonathan Corbet *
2010-05-17 20:29:00 540
原创 对于Tekkaman completion 的一点疑问?? 没有 解决
[Tekkaman2440@SBC2440V4]#./completion_testwprocess 817 (completion_test) awakening the readers...awoken 814 (completion_test)write code=0[Tekkaman2440@SBC2440V4]#r
2010-05-17 17:42:00 440
原创 mknod
名字mknod - 建立块专用或字符专用文件 总览mknod [options] name {bc} major minor mknod [options] name p GNU 选项(缩写):[-m mode] [--help] [--version] [--] 描述mknod 用指定名称产生一个FIFO(命名管道),字符专用或块专用文件。
2010-05-17 16:36:00 608
原创 理解和认识udev
问:什么是udev?答:udev是一种工具,它能够根据系统中的硬件设备的状态动态更新设备文件,包括设备文件的创建,删除等。设备文件通常放在/dev目录下。使用udev后,在/dev目录下就只包含系统中真正存在的设备。问:udev支持什么内核?答:udev只支持linux-2.6内核,因为udev严重依赖于sysfs文件系统提供的信息,而sysfs文件系统只在linux-2.
2010-05-16 15:01:00 509
转载 如何解压.gz的压缩文件
#gzip -d xxx.gztar命令 [root@linux ~]# tar [-cxtzjvfpPN] 文件与目录 ....参数:-c :建立一个压缩文件的参数指令(create 的意思);-x :解开一个压缩文件的参数指令!-t :查看 tarfile 里面的文件!特别注意,在参数的下达中, c/x/t 仅能存在一个!不
2010-05-16 14:06:00 699
原创 网上 资源 收藏
http://blog.chinaunix.net/u1/38994/article_56615.html chinanuix 博客讲解 linux 等等
2010-05-16 12:57:00 337
转载 内存管理
内存管理FAQ http://hi.baidu.com/%B8%F8%EB%DE%CC%ED%CD%EB%B7%B9 /blog/item/bc4854082ad7b336e8248839.html Q:什么是mm? A:指的是内存管理(memory management)。是内核中的一套软件机制,用于有效管理内存的使用。 Q:内存管理的软件实现了什么功能?
2010-05-16 10:38:00 447
原创 错误 中断 笔记!!
Pid: 0, comm: swapperCPU: 0 Not tainted (2.6.30.4-EmbedSKy #18)PC is at default_idle+0x64/0x6cLR is at default_idle+0x58/0x6cpc : [] lr : [] psr: 60000013sp : c037d
2010-05-15 13:32:00 1867
原创 中断处理程序!!
为什么 中断处理程序不能执行任何柱塞过程?? 中断处理程序是代表进程执行的,他所代表的是进程必须总处于TASK_RUNNING状态,否则,就可能出现系统僵死情形。
2010-05-14 19:39:00 496
转载 Linux中等待队列机制分析
什么是等待队列? 在软件开发中任务经常由于某种条件没有得到满足而不得不进入睡眠状态,然后等待条件得到满足的时候再继续运行,进入运行状态。这种需求需要等待队列机制的支持。Linux中提供了等待队列的机制,该机制在内核中应用很广泛。 在Linux内核中使用等待队列的过程很简单,首先定义一个wait_que
2010-05-13 20:20:00 550 1
原创 test_irq.c 源代码 读书笔记
api: #include#include#includeint main(void){ int fd; fd=open("dev/test_led",0); printf("start the system"); while(1); close(fd); printf("bye the system/n"); return 0;} #include#inc
2010-05-12 22:03:00 547
原创 test_led.c 和 api test_led.c 源代码 读书笔记!!!
API:#include#include#includeint main(void){ int fd; fd=open("dev/test_led",0); while(1) { ioctl(fd,0);sleep(1); ioctl(fd,1);sleep(1); } close(fd); return 0;}LINUX:#include#include
2010-05-12 21:56:00 495
原创 应该 成功 实现中断 操作!!!!
y由于 使用的是test_led.c的 源代码。在test_led.c 的代码中增加了open release test_irq_hander() 一些函数和数据如下:分析: insmod test_irq.ko mknod dev/test_led c 243 0后 在 api函数中,test_led 表示设备 因为源代码是test_
2010-05-12 21:39:00 445
原创 成功 test_led.ko+api !!! 但是还有疑惑 关于 指针和地址 问题
优先级问题:struct example{ longnt idnumber; char *name;}guo;对于*guo.name形式,由于运算符"." > "*",所以,*guo.name等价于*(guo.name)其含义是访问guo.name的目标变量。 struct test_led_dev={
2010-05-11 19:54:00 453
原创 cdev 内存分配
三。字符设备的注册内核内部使用struct cdev结构来表示字符设备。在内核调用设备的操作之前,必须分配并注册一个或多个struct cdev。struct cdev的定义以及相关的一些辅助函数在头文件:中。 struct cdev { struct kobject kobj; struct module *
2010-05-11 13:04:00 1164
转载 linux内核register_chrdev_region()系列函数
内核中所有已分配的字符设备编号都记录在一个名为 chrdevs 散列表里。该散列表中的每一个元素是一个 char_device_struct 结构,它的定义如下: static struct char_device_struct { struct char_device_struct *next; // 指向散列冲突链表中的下一个元素的指针
2010-05-11 12:29:00 389
原创 linux_led.ko 不知道怎么样解决??要仔细看看
这个问题 貌似 以前 出现过!! 应该是指针问题!!明天 解决。。 2010.5.11在 linux 2.6中:register_chrdev_region() 是registere_chredv的升级版 内存分配: 在课本中 已经分配内存 globalmem_devp=kmalloc(sizeof(globalmem_dev),GFP
2010-05-10 22:20:00 410
转载 arm linux 等待队列简单分析
Author-------Dansen-----xzd2734@163.comwait_queue_head_t wait_q;首先看看wait_queue_head_t这个等待队列的结构在wait.h中定义了这个结构typedef struct __wait_queue_head wait_queue_head_t;struct __wait_queue_head
2010-05-09 10:24:00 502
原创 自旋锁 spinlock 理解
自旋锁spinlock是一种对临界资源进行互斥手访问的典型手段,其名称源于他的工作方式。为了获得一个自旋锁,在某cpu上运行的代码需先执行一个原子操作,该操作测试并设置test-and-set某个内存变量,由于他是原子操作,所以在该操作完成之前其它执行单元不可能访问这个内存变量。 如果测试结果表明锁已经空闲,则程序获得这个自旋锁并继续执行;如果测试结果表明锁仍被占用,程序将在一
2010-05-09 09:49:00 516
转载 Spinlock简介
作者 : cjc86在 这篇文章中,我将会介绍 Kernel 提供用来使用 spinlock 的 function。除此之外,我还会告诉各位,为何在 SMP 的环境里,使用 spinlock 会比将所有 CPU 的中断 disable 这个方法来的有效率,我也会告诉各位如何针对不同的使用需求,使 spinlock 的 cost 再降低,进而使系统的效能更好... 前言
2010-05-09 09:30:00 358
原创 定义指针
在定义指针时,编译器并不为指针所指向的对象分配空间,他只是分配指针本身的空间,除非在定义时,同时赋给指针一个字符串常量进行初试化。列如:下面的定义创建了一个字符串常量(为其分配了空间内存)char *p="abcd"; 在 ansi c 中,初始化指针时所创建的字符串常量被定义为只读
2010-05-07 17:53:00 399
转载 Linux设备驱动程序学习(1)-字符设备驱动程序
Linux设备驱动程序学习(1)-字符设备驱动程序今天进入《Linux设备驱动程序(第3版)》第三章字符设备驱动程序的学习。这一章主要通过介绍字符设备scull(Simple Character Utility for Loading Localities,区域装载的简单字符工具)的驱动程序编写,来学习Linux设备驱动的基本知识。scull可以
2010-05-06 21:30:00 435
转载 linux 中断处理
中断处理 在 2.4 内核和 2.6内核中都使用 request_irq() 函数来注册中断服务函数。在 2.4 内核中,需要包含的头文件是 #include ,2.6 内核中需要包含的头文件则是 #include 。函数原型如下:2.4 内核int request_irq (unsigned int irq, void
2010-05-04 12:53:00 407
转载 linux设备驱动 IO Port
1. I/O Port 和硬件打交道离不开I/O Port,老的ISA设备经常是占用实际的I/O端口,在linux下,操作系统没有对I/O口屏蔽,也就是说,任何驱动程序都可对任意的I/O口操作,这样就很容易引起混乱。每个驱动程序应该自己避免误用端口。 有两个重要的kernel函数可以保证驱动程序做到这一点。
2010-05-04 12:49:00 797
转载 linux cat echo cal date clear命令
cat 命令使用方式:cat [-AbeEnstTuv] [--help] [--version] fileName 说明:把档案串连接后传到基本输出(萤幕或加 > fileName 到另一个档案) 参数: -n 或 --number 由 1 开始对所有输出的行数编号 -b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号 -s
2010-05-04 12:39:00 822
转载 linux设备驱动开发详解——globalmem
linux设备驱动开发详解——globalmem 收藏 常见的两种错误:1.在插入模块的时候出现如下问题: # insmod globalmem.ko in
2010-05-04 12:37:00 582
转载 sbc_2410开发板内核2.6.30.4移植
大概又过了一个星期了,没想到内核的移植是如此的繁琐,今天下午5:20的时候,我终于看到了刚开始的启动界面,我和燕齐开心不已啊。废话少说,我要把我和他的开发过程记录一下。首先是下载2.6.30.4的内核源码,同时使用的编译器是4.3.3,有了这两个东西后就是使用已有的文件系统yaffs2文件镜像,我使用的天嵌公司的文件系统镜像,因为我的板子的nandflash是64MB的,一定要使用相应的
2010-05-03 10:26:00 885
转载 linux 2.6.22.1内核在s3c2410平台的移植(完美版)
linux 2.6.22.1内核在s3c2410平台的移植(完美版)-------------------作者:无猫 ++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------bootloader编译环境:vivi版本:0.1.4交叉编译器(CROS
2010-05-03 10:17:00 538
原创 vmlinux,EABI
vmlinux是内核映象,它是内核在虚拟空间运行时代码的真实反映。(vm是virtual memory)以下示例程序所使用的编译器为 arm-linux-gcc-4.3.2 with EABI,如果你使用了其他版本的交叉编译器,编译完有可能无法在开发板上运行。因为友善之臂采用的是Linux2.6内核,而交叉编译器在编译源代码的时候,对于浮点运算的会预设使用FPA(Float Point
2010-05-03 10:08:00 362
linux 内核定时器 编程
2011-12-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人