自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

tong646591的专栏

嵌入式开发

  • 博客(63)
  • 资源 (1)
  • 收藏
  • 关注

原创 linux中断编程

一.申请和释放中断1.申请IRQint request_irq(unsigned int irq,void (*handler)(int irq,void *dev_id,struct pt_regs *regs),unsigned long irqflags,const char * devname,void *dev_id);irq:要申请的硬件中断号handler:向系统登记的中

2013-01-30 14:32:49 534

原创 字符设备(三)之globalmem实例集

一.globalmem虚拟设备实例描述globalmem意味着“全局变量”,在globalmem字符设备驱动中会分配一块大小为GLOBALMEM_SIZE(4KB)的内存空间,在驱动中提供针对该内存片的读写,控制,定位函数。#include #include #include #include #include #include #include #include #i

2013-01-29 15:01:51 982 1

原创 字符设备(二)之主要数据结构

一.linux文件系统和字符设备驱动应用程序和VFS之间的接口是系统调用,而VFS和磁盘文件系以及普通设备之间接口是file_operation结构体成员函数,这个结构包含打开,关闭,读,写等各种对文件的操作字符设备上层不涉及到磁盘,所以字符设备的file_operation成员函数直接由设备驱动提供。file_operation是字符设备的操作核心。1.file结构体文件结构体代

2013-01-29 10:50:00 724

原创 字符设备(一)

1.cdev结构体linux2.6中使用cdev结构体描述字符设备struct cdev { struct kobject kobj;//内嵌的kobject对象 struct module *owner;//所属模块 const struct file_operations *ops;//文件操作结构体 struct list_head list; dev_t dev;//设备

2013-01-29 09:51:11 559

原创 ubuntu下使用root用户

◆允许 su 到 root非常简单,下面是设置的方法:me@tipfoo:~$ sudo passwdPassword: <--- 输入安装时那个用户的密码Enter new UNIX password: <--- 新的Root用户密码Retype new UNIX password: <--- 重复新的Root用户密码passwd:已成功更新密码◆允许root登录如果要允

2013-01-28 20:50:16 599

原创 mini2440移植之SPI驱动

目标平台:mini2440内核:linux2.6.32.21,修改arch/arm/mach-s3c2440/mach-mini2440.c文件,加入头文件:#include #include 然后加入如下代码:static struct spi_board_info s3c2410_spi0_board[] ={ [0] = {

2013-01-25 21:55:29 717

转载 跟我一起写 Makefile

概述——什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写m

2013-01-24 21:46:31 530

转载 linux内核结构详解

Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。     1.进程调度(SCHED):控制多个进程对CPU的访问,使得多个进程能在CPU中微观串行运行,看起来却像是并行运行。驱动程序编程中,若没有获得资源则进入休眠,直到被唤醒。    2.内存管理(MM)允许多个进程安全的共享主内存区域。Linux的内存管理支持虚拟内存(为每个进程进行虚拟内存到

2013-01-24 20:49:40 1522 1

原创 嵌入式笔试常考题目

C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。        从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这是个愚蠢的问题吗?如要你答出某个字

2013-01-24 13:40:10 887

转载 关于Linux驱动(应用)程序头文件使用

驱动程序: #include 是在linux-2.6.29/include/linux下面寻找源文件。#include 是在linux-2.6.29/arch/arm/include/asm下面寻找源文件。#include 是在linux-2.6.29/arch/arm/mach-s3c2410/include/mach下面寻找源文件。#include 在linux-2.6.31_

2013-01-14 14:36:46 650

原创 简单字符设备学习总结

通过这段时间的学习,能掌握简单字符设备的开发流程及其编程思想。基础:1.对裸机的工作原理理解,对寄存器的掌握,经常查阅头文件,尤其是硬件相关的头文件内核,是很有必要的            2.对内核基础运行机制,尤其是同步,中断的理解            3.对数据结构,对传址方式的掌握,对函数指针的了解。            4.对linux设备模型的学习,只有站到对模型的

2013-01-14 10:04:34 640

转载 linux内核定时器编程

一.linux内核定时器基本结构和函数1)struct timer_list 一个struct timer_list对应了一个定时器。#include 以下列出常用的接口:struct timer_list { struct list_head entry;//定时器列表 unsigned long expires;//定时器服务函数开始执行时间

2013-01-11 15:16:09 669

原创 mini2440之背光驱动

背光是由LCD上LCD_PWR(GPG4)控制的。#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include

2013-01-11 14:00:57 795

原创 input子系统

一,input子系统介绍linux系统提供了input子系统,按键,触摸屏,键盘,鼠标等输入都可以利用input接口函数来实现设备驱动,linux内核中,input设备用input_dev结构体描述,使用input子系统实现输入设备驱动的时候,驱动的核心工作是向系统报告按键,触摸屏,键盘,鼠标等输入事件(event,通过input_event结构体描述),不再需要关心文件操作接口,因为

2013-01-10 18:50:55 975

原创 mini2440之触摸屏驱动

一.触摸屏工作原理使用触摸屏接口功能,AIN[7],AIN[5]用于对触摸屏模拟信号进行转换。本例中,触摸屏面板XP引脚与AIN[7]连接,YP引脚与AIN[5]连接,为了控制触摸屏面板XP,XM,YP,YM引脚,S3C2440芯片外使用了4个外部晶体管,控制信号nYPON,YMON,nXPON,XMON和这4个晶体管连接。使用触摸屏操作步骤:(1)

2013-01-09 21:27:40 2842

原创 mini2440之ADC驱动分析

一,ADC原理ADC,模数转换器,将模拟量转换成数字量,采样,保持电路与AD转换器集成在一起。AD转换器模拟输入信号是直流电压信号,0~3.3V之间。S3C2440有8路模拟输入信号,AD转换器内部有一个模拟多路选择器,某一时刻只能将一路模拟输入信号,通过模拟多路选择器接通进行AD转换,而其他路模拟输入信号被断开。片内ADC电路ADC转换电路模块图XP,XM,Y

2013-01-09 15:44:54 2390

原创 linux中阻塞机制

一,阻塞与非阻塞阻塞是指没有获得资源则挂起进程,直到获得资源为止。被挂起的进程进入休眠状态,被调度器的运行队列移走,直到等待条件被满足。非阻塞是不能进行设备操作时不挂起,或放弃,或反复查询,直到可以进行操作为止。驱动程序常需要这种能力:当应用程序进行read(),write()等系统调用时,若设备的资源不能获取,而用户又希望以阻塞的方式访问设备,驱动程序应该在设备驱动程序的xxx_re

2013-01-09 14:15:37 9195

原创 linux同步机制

一.并发控制(1)自旋锁得不到资源,会原地打转,直到获得资源为止定义自旋锁 spinlock_t spin; 初始化自旋锁 spin_lock_init(lock); 获得自旋锁spin_lock(lock);获得自旋锁,如果能立即获得,则马上返回,否则自旋在那里,直到该自旋锁的保持者释放spin_trylock(lock);尝试获得自旋锁,如果能立即获得,它获得并返回真

2013-01-09 10:45:22 2180

原创 linux中同步和异步机制

一.并发控制(1)自旋锁得不到资源,会原地打转,直到获得资源为止定义自旋锁 spinlock_t spin; 初始化自旋锁 spin_lock_init(lock); 获得自旋锁 spin_lock(lock);获得自旋锁,如果能立即获得,则马上返回,否则自旋在那里,直到该自旋锁的保持者释放 spin_trylock(lock);尝试获得自旋锁,如果能立即获得,它获得并返

2013-01-09 10:43:41 5687

转载 linux中__iomem

__iomem是linux2.6.9内核中加入的特性。是用来个表示指针是指向一个I/O的内存空间。主要是为了驱动程序的通用性考虑。由于不同的CPU体系结构对I/O空间的表示可能不同。当使用__iomem时,编译器会忽略对变量的检查(因为用的是void __iomem)。若要对它进行检查,当__iomem的指针和正常的指针混用时,就会发出一些警告。保存经过虚拟映射之后的内存地址。

2013-01-09 09:06:27 2919

转载 linux中S3C2440的物理地址映射到虚拟地址详解

linux-2.6.30.4\arch\arm\plat-s3c\include\plat\ map-base.h#defineS3C_ADDR_BASE (0xF4000000)#ifndef __ASSEMBLY__#define S3C_ADDR(x) ((void__iomem __force *)S3C_ADDR_BASE+ (x))#else#defineS3C_ADDR

2013-01-08 14:05:05 2438

转载 指纹识别技术设计的注意事项

指纹识别用于各种应用,包括电子门禁系统、智能卡、车辆点火开关控制系统、带指纹控制存取功能的 USB 记忆棒及许多其它应用。指纹扫描仪中的数字信号处理元件可执行滤波、转换、特征提取、匹配运算及其它算法等复杂的 DSP 功能。  指纹传感器可以运用电容、光学、压力或热感技术来获取手指特征的图像。最常用的指纹传感器解决方案首先使用激光或 LED 灯照亮指纹,然后使用 CCD 或价格较为低廉的 C

2013-01-07 09:39:04 752

原创 关于linux内核中结构体初始化的新写法

查看linux源代码,经常会被其中一些程序的写法所迷惑,此种初始化写法并不是什么特殊的代码风格,而是所谓的C语言标记化结构初始化语法(designated initializer),而且还是一个ISO标准,C99注意:适用于GCC编译器,GCC能完美支持C99,VC2005支持C89,还不支持C99,只有能完美支持C99的编译器才能编译通过。GCC有扩展标记化结构初始化语法,写法是

2013-01-05 15:05:55 2454

原创 UART

一,基础知识数据通信方式:并行通信:利用多条数据线将数据的各位同时传送。串行通信:利用一条数据线将数据一位位地顺序传送。异步通信:以一个字符为传输单位,通信中两个字符间的时间间隔是不固定的。通信协议:通信双方约定的一些规则,在异步通信时,对数据格式有如下约定:规定有空闲位,起始位,资料位,奇偶校验位,停止位。波特率:衡量数据传输速率标准记录每秒传送的二进制位数,例如数据

2012-12-27 21:44:13 995

原创 红外通信

红外通信以红外线作为信息传播的载体,进行短距离,点对点,传输。利用波长850~900nm的红外线传输。红外通信将二进制调制成脉冲序列,驱动红外线发射管向外发送红外光,接收端则将收到的红外光脉冲信号转换成电信号,再进行放大,滤波,解调后还原成二进制数。典型的红外数据传输模块由:接口电路,编解码器,发送器,接收器组成。S3C2440 UART接口电路包含了编解码器,红外发射接收可以做到一起,简

2012-12-27 14:39:40 1097 1

原创 PWM/RTC/WDT定时器

一,PWM定时器S3C2440有五个16位的定时器,定时器0~3有PWM功能,输出信号连接到TOUT0~TOUT3引脚,定时器4没有此功能。定时器0~1,共用一个8位预分频器,定时器2~4共用另一个8位预分频器,TCFG0配置预分频值,对PCLK分频,TCFG1为每个定时器选择时钟分频信号(2,4,8,16)。自动重装,一次定时结束,重新赋值给定时计数器,重新定时,否则定时器停止。定时

2012-12-27 00:02:43 1784

原创 SMB服务建立

1.能ping通,首要条件网卡要工作起来,即本地连接正常工作。2.使用bridge方式,主机与虚拟机工作在同一个IP网段。3.重启network/etc/init.d/network restart4.修改smb.conf[root]comment = Root Directoriesbrowseable = yeswriteable = yespath = /

2012-12-26 15:54:11 509

原创 网络基础知识

1.基础概念集线器(hub):实际上就相当于扩展接口,一个网口分为多个网口,可共享带宽,相当于只传输电流交换机:转换MAC地址,独享带宽路由器:转换IP地址,共享带宽。有两个IP,一个是固定的公网IP,一个是装换后的IP。2.IP地址eg:192.168.0.125    前三个是网络号码,后面是主机号码,同一个网络:同一个物理网段内,主机的IP具有相同的Net_ID,

2012-12-26 15:51:46 23284

原创 Makefile中常用自动变量

自动变量 含义$* 不包含扩展名的目标文件名称$+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件$ 第一个依赖文件的名称$? 所有时间戳比目标文件晚的依赖文件,并以空格分开$@ 目标文件的完整名称$^ 所有不重复的依赖文件,以空格分开$% 如果目标是归档成员,则该变量表示目标的归档成员名称实例:OBJS = kang.o yul

2012-12-26 15:49:40 3207 1

原创 MMU

1.MMU:将虚拟地址转换成物理地址,才传给存储管理器进行寻址。2.操作系统通过MMU使各个用户进程都有自己独立的地址空间:地址映射功能使每个进程拥有看起来一样地址空间,内存访问权限的检查可以保护每个进程所用的内存不会被其他进程破坏。3.虚拟地址要转换成物理地址才能读写实际的数据,通过将虚拟地址空间,物理地址空间划分为一个同样大小的一块块小空间,然后为这两类小空间建立映射空间,有可能多块虚

2012-12-26 15:48:11 799

原创 linux总结

1.指定文件读取makefilemake -f name make --file=name注:用于本目录中没有makefile,Makefile或GNU make,需要手动指定文件去读取。2.系统调用man 2 write3.多窗口切换:sp /etc/hosts注:Ctrl+w+上下箭头4.数据重定向cat > catfile cat > catf

2012-12-26 15:47:02 572

转载 GPIO驱动相关函数及物理地址,虚拟地址映射

micro2440采用S3C2440处理器,和这个平台相关的代码主要在arch/arm/mach-s3c2410和include/asm-arm/arch-s3c2410中,相关驱动在drivers目录中。(1)DM9000 网卡驱动Linux-2.6.32.2/drivers/net/dm9000.c(2)串口(包括三个串口驱动0,1,2,对应设备名/dev/ttySAC0,1,2)

2012-12-26 14:24:58 3140

原创 mini2440之PWM混杂驱动分析

在其Linux源码中,和这个平台相关的代码主要在arch/arm/mach-s3c2410和include/asm-arm/arch-s3c2410Linux对I/O的操作都定义在asm/io.h中,相应的在arm平台下,就在asm-arm/io.h中。#include #include #include #include #include #include #includ

2012-12-26 14:17:57 972

原创 S3C2440之I/O寄存器和中断寄存器

I/O寄存器一.端口寄存器组:GPACON: 0=输出 1=初始引脚状态GPxCON:  00=输入,01=输出,10=初始引脚状态,11=保留GPxDATGPxUP:   0:允许上拉,1:禁止上拉一般情况下不需要设置GPxUP二,外部中断控制寄存器组EXTIIN0(7~0):000=低电平,001=高电平,01x=下降沿触发,10x=上升沿触发,11x=2个沿都

2012-12-25 16:27:21 1046

原创 udev设备文件系统

1.udev是2.6.13之后linux采用的设备文件系统,之前采用devfs设备文件系统,不是一种文件系统,而是生成设备文件系节点的方法。主要功能在于管理/dev下的设备节点,并导出信息到系统中的/sysfs,它利用sysfs的导出信息创建设备节点。在嵌入式系统中,是用的是mdev.主要优点在于:udev可以在用户态运行,而不像devfs在内核运行。传统上,使用静态注册地方法创建设备节点,那

2012-12-24 14:35:13 479

原创 点亮led过程分析

在mini2440中,led,按键等驱动默认已经被编译入内核,所以一直不知道同一个硬件设备资源能不能作为多个模块,编译入内核。故重写了一个myled.ko,系统默认是led.ko,并用应用程序检测。myled.c #include #include #include #include #include #include #include #include #includ

2012-12-23 16:45:34 602

原创 关于无法生成模块的原因MODPOST 0 modules

这几天,一直都被这个问题纠结着,挺莫名其妙。通过昨天的思索,发现,生成一个正确的模块,需要根据模块的运行平台,指定合适的内核源代码,合适的编译器。还有就是由于内核版本的不断升级,有些接口,有些变量已经不再使用,这个时候,指定的内核源代码无法继续为程序提供所需的函数,模块无法生成。最明显的一个错误如下之前百思不得其解,有朋友说是因为之前没有编译过,OK,哥编译一下,问题在这里,obj

2012-12-23 10:10:16 13042 3

原创 关于内核模块安装了,但是没有打印信息的解决

提升为最高级别#include #include MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void){ printk("" "hello world enter\n"); return 0;}static void hello_exit(void){ printk("

2012-12-22 15:03:47 1118

原创 insmod: error inserting 'hello.ko': -1 Invalid module format

insmod: error inserting 'hello.ko': -1 Invalid module format生成的ko,不能正常加载,提示以上错误是因为内核模块生成的环境与运行的环境不一致,用linux-2.6.27内核源代码生成的模块,可能就不能在linux-2.6.32.2内核的linux环境下加载,需要在linux-2.6.27内核的linux环境下加载。最多见的就是

2012-12-22 14:13:27 3306

转载 从30岁到35岁:为你的生命多积累一些厚度——与之共勉zz

转载于:http://blog.21ic.com/user1/991/archives/2012/97111.html常常思考一个问题:是不是考虑做2年开发,打2年酱油,然后结婚生子,这样到底行不行?无论你是男是女,人生是一场独自修行的道路。如果在可以选的时候,还是选择靠自己吧。无论你是要养家还是要实现人生价值,如果你处在迷茫之中,希望这篇文章可以传达一些正能量,可以帮到你。--当然这篇文

2012-12-22 08:38:02 589

嵌入式系统设计师教程

嵌入式系统设计师教程,伴你考过中级工程师

2012-09-16

空空如也

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

TA关注的人

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