自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Mr.Right

错误中成长,改错中进步。不要总是看低别人看高自己,更不要看高别人看低自己。

  • 博客(11)
  • 收藏
  • 关注

原创 Linux嵌入式驱动初体验(七)--- LED驱动之字符设备篇

      Linux中的设备可以分为三类:字符设备、块设备、网络设备,对于上一篇文章中的驱动编写的方法,是基于platform结构的,下面我们把它改变成字符设备的驱动编写模式,原理和方法基本是一样的,只是换了一个外壳而已。      首先还是看一下依照字符设备驱动编写所设计的数据结构:static struct file_operations led_fops = { .owner = THIS_MODULE, .open = led_open, .release = led_releas

2010-09-26 21:58:00 1698

原创 Linux嵌入式驱动初体验(六)--- LED驱动测试程序

<br />      通过上一篇文章,我们已经写好了一个LED驱动,但是如果光运行这个驱动程序(其实它是一个模块程序,不能称之为运行),LED灯是不会亮的,驱动程序的作用其实就相当于编写了一些库函数一样,当驱动程序通过编译,然后以模块的形式加载到内核之后,这些函数就是可以用的了,然后通过调用这些函数来实现设备的使用。原理就是这么个原理,下面就根据上一篇文章得到的那些函数,来写一个能够让LED闪烁的,称之为测试程序的代码。<br />      其实代码并不长,重点在于编写的模式和思路。对于一个设备来说,L

2010-09-25 21:31:00 3160 1

原创 Linux嵌入式驱动初体验(五)--- LED驱动解析

<br />      在编写驱动程序的时候,入门的应用应该就是LED的驱动了,它的地位就像是Hello World之于C语言。其实LED灯是一种原子设备(我记得我们一个硬件老师说了这么一个名字,如果我说错了,就怨我没记住吧),意思就是只有0和1两种结果,就是只有亮和不亮两种结果,要是非和我抬杠说有半亮不亮的状态,那我也没话说了。所以对于一个原子设备来说,它的驱动还是比较容易弄懂的,而且对于一个简单的LED驱动来说,可以不用考虑一个最让人头疼的部分,就是---中断,所以还是比较好上手的。<br />    

2010-09-13 21:06:00 3254 1

原创 Linux嵌入式驱动初体验(四)--- 驱动结构分析

<br />      在Linux系统上编写驱动程序,说简单也简单,说难也难。难在于对算法的编写和设备的控制方面,是比较让人头疼的;说它简单是因为在Linux下已经有一套驱动开发的模式,编写的时候只需要按照这个模式写就可以了,而这个模式就是它事先定义好的一些结构体,在驱动编写的时候,只要对这些结构体根据设备的需求进行适当的填充,就实现了驱动的编写。<br />      首先在Linux下,视一切事物皆为文件,它同样把驱动设备也看成是文件,对于简单的文件操作,无非就是open/close/read/wri

2010-09-13 10:05:00 1723

原创 Linux嵌入式驱动初体验(三)--- 模块接触

      对于驱动的开发,说的简单些,就是一个模块编程,然后编译成内核模块,加载到内核中运行。下面就先介绍一个简单的模块程序,然后再慢慢引出我们需要关注的重点:#include #include static int __init hello_init(void){ printk(KERN_ALERT"/nHello Kernel World/n"); return 0;}static void __exit hello_exit(void){

2010-09-10 18:21:00 1308

原创 Linux嵌入式驱动初体验(二)--- 内核装载

<br />      对于有操作系统的嵌入式开发来说,在开发板上肯定要有一个可以运行的操作系统,就拿3250上的Linux移植来说,首先要做的就是编译内核源码,下面就说一下整个内核移植的过程吧。<br />      首先要有内核源代码,但是要知道,这个源代码不是电脑上用的那个源码,而是经过裁剪修改过的,适合3250CPU使用的Linux内核,在3250光盘里提供的内核源码是 linux-2.6.27.8 的,把源码包 linux-2.6.27.8-smartarm3250_V1.00.tar.bz2 复

2010-09-09 16:17:00 1939

原创 Linux嵌入式驱动初体验(一)--- 准备工作

<br />      开发嵌入式驱动,其实不止是驱动程序,应用程序也是如此,都需要有个准备工作,下面我就以SmartArm3250和Linux系统作为依据,说一下需要准备什么,其实也不是给别人说教什么,只是自己记录一下,如果有能帮别人的地方,也算是我助人为乐了。<br />      首先,既然是嵌入式,就是以嵌入的方式把一个开发出来的东西放到一个载体上去运行,这个载体也就是开发板。对于Arm来说,它上面的资源是很小的,3250这块开发板的Nand Flash是256MB,根本放不下什么开发环境的,而且在

2010-09-08 22:12:00 2174 4

原创 yes or no

<br />      首先附上一段代码,猜猜它的运行结果是什么:<br />#include <stdio.h>#define SIZE(a) ( (sizeof(a)) / (sizeof(a[0])) )int main(void){ int a[5]; int b = -1; if(SIZE(a) > b) printf("yes/n"); else printf("no/n");

2010-09-08 17:11:00 1014

原创 Ubuntu下nfs服务器的搭建

      nfs的全称是Network File-System,可以通过它实现不同机器不同系统之间的文件共享。目前我正在用SmartArm3250,现在编好程序后,是通过nfs把可执行文件传输到开发板中,让其在开发板里运行的。      现在以这个模式来说明nfs的建立,主机是安装有Ubuntu10.04的PC机,目标板是安装有裁剪后的Linux的SmartArm3250。安装nfs服务是在主机上进行配置,在目标板上进行操作使用的。具体的步骤如下:      一、在主机上安装必要的软件,使用命令 : 1、

2010-09-06 10:04:00 2842 2

原创 变量声明启示(二)

      之所以上一篇文章叫XXX(一),原因是还有一篇叫XXX(二),而且还可能会有XXX(三)。恩,废话不多说,只此两句。按照上一篇文章的分析,写在前面的变量一定是先进入栈的,那么事实果真如此吗?其实不是的,下面用一些程序来验证一下。      首先说明一下,栈是一个先进后出的数据结构,而在内存中栈底处于高地址,栈顶处于低地址,数据存入栈时,是给该数据分配足够的空间,然后高位放在低地址,低位放在高地址,也就是说,一个数据处于高地址,那么就说明它是先入栈的,比低的地址是后入栈的。      好了,首先看

2010-09-03 10:26:00 647 1

原创 变量声明启示(一)

<br />      昨天闲来无事,在Linux下编了一个小程序,没有什么算法,但是出现了一个大问题,仔细检查,发现问题所在,然后通过测试就牵出了一个以前没有怎么注意到的东西,特此留念,警示一下自己。<br />      首先给出一段简单的不能再简单的源代码:<br />#include <stdio.h>int main(void){ int a = 1234; char b[4]; printf("a = %d(第一次)/n", a);

2010-09-02 11:57:00 750

空空如也

空空如也

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

TA关注的人

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