- 博客(40)
- 资源 (18)
- 收藏
- 关注
转载 基于ARM的嵌入式Linux移植真实体验(1)――基本概念
http://21cnbao.blog.51cto.com/109393/120254
2012-07-30 09:39:52 562
转载 ARM的嵌入式Linux移植体验之BootLoader
BootLoader指系统启动后,在操作系统内核运行之前运行的一段小程序。通过BootLoader,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 BootLoader 几乎是不可能的。尽管如此,我们仍然可
2012-07-30 09:36:22 1844
转载 宋宝华谈 ARM 的嵌入式 Linux 移植体验之三:操作系统
在笔者撰写的《C 语言嵌入式系统编程修炼之道》一文中,主要陈诉的软件架构是单任务无操作系统平台的,而本文的侧重点则在于讲述操作系统嵌入的软件架构,二者的区别如下图 嵌入式操作系统并不总是必须的,因为程序完全可以在裸板上运行。尽管如此,但对于复杂的系统,为使其具有任务管理、定时器管理、存储器管理、资源管理、事件管理、系统管理、消息管理、队列管理和中断处理的能力,提供多任务处
2012-07-30 09:35:05 8636
转载 ARM的嵌入式Linux移植体验之应用实例
应用实例的编写实际上已经不属于Linux操作系统移植的范畴,但是为了保证本系列文章的完整性,这里提供一系列针对嵌入式Linux开发应用程序的实例。 编写Linux应用程序要用到如下工具: (1)编译器:GCC GCC是Linux平台下最重要的开发工具,它是GNU的C和C++编译器,其基本用法为:gcc [options] [filenames]。 我们应该使
2012-07-30 09:33:37 749
转载 ARM的嵌入式Linux移植体验之设备驱动
作者:宋宝华 文章来源:天极开发设备驱动程序是操作系统内核和机器硬件之间的接口,它为应用程序屏蔽硬件的细节,一般来说,Linux的设备驱动程序需要完成如下功能: ·设备初始化、释放; ·提供各类设备服务; ·负责内核和设备之间的数据交换; ·检测和处理设备工作过程中出现的错误。 Linux下的设备驱动程序被组织为一组完成不同任务的函数
2012-07-30 09:32:38 639
转载 十 ARM9(2440)的IIC——理论知识及程序实例
原文地址:十 ARM9(2440)的IIC——理论知识及程序实例作者:骨Zi里德骄傲概述S3C2440A RISC 微处理器可以支持一个多主控IIC 总线串行接口。一条专用串行数据线(SDA)和一条专用串行时钟线(SCL)传递连接到IIC 总线的总线主控和外设之间的信息。SDA 和SCL 线都为双向的。多主控IIC 总线模式中,多个S3C2440A RISC 微处理器可
2012-07-30 09:26:41 1648
转载 register_chrdev()与register_chrdev_region()
分配设备编号,注册设备与注销设备的函数均在fs.h中声明,如下:extern int register_chrdev_region(dev_t,unsigned int,const char*);表示静态的申请和注册设备号extern int alloc_chrdev_region(dev_t,unsigned int,const char*);表示动态的申请和注册设备号e
2012-07-18 16:47:13 805
转载 ioctl 函数
本函数影响由fd 参数引用的一个打开的文件。 #includeint ioctl( int fd, int request, .../* void *arg */ );返回0 :成功 -1 :出错 第三个参数总是一个指针,但指针的类型依赖于request 参数。我们可以把和网络相关的请求划分为6 类:套接口操作文件操作接口操作ARP 高速缓存操作路
2012-07-18 14:30:28 703
转载 memset函数
需要的头文件 在C中 or 在C++中 void *memset(void *s, int ch, size_t n); 函数解释:将s中前n个字节替换为ch并返回s; memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。常见错误 第一: 搞反了ch 和 n的位
2012-07-18 10:51:01 562
转载 嵌入式开发板linux驱动与pc——linux驱动的makefile
1、开发板linux驱动makefileKERN_DIR = /bbs/linux-2.6.28.7all:make -C $(KERN_DIR) M=`pwd` modules clean:make -C $(KERN_DIR) M=`pwd` modules cleanrm -rf modules.orderobj-m += globalmem.o2、p
2012-07-17 21:22:24 1368
转载 XP下Virtualbox 虚拟Linux 共享文件夹设置
环境:主机操作系统是Windows XP,虚拟机是VirtualBox,虚拟主机为Linux系统, 1. 安装增强功能包(Guest Additions) 安装好Linux虚拟主机后,运行它并登录。然后在VirtualBox的菜单里选择"设备(Devices)" -> "安装增强功能包(Install Guest Addi
2012-07-17 15:46:18 1159
转载 自旋锁
一种广泛应用的同步技术是加锁。当内核控制路径必须访问共享数据结构或进入临界区时,就需要为自己获取一把”锁”。由锁机制保护的资源非常类似于限制于房间内的资源,当某人进入房间时,就把门锁上。如果内核控制路径希望访问资源,就试图获取钥匙”打开门”。当且仅当资源空闲时,它才能成功。然后,只要它还想使用这个资源。门就依然锁着。当内核控制路径释放了锁时,门就打开,另一个内核控制路径就可以进入房间。图5
2012-07-16 10:54:06 2995
转载 火星探测器的优先级翻转
From: Mike Jones mbj@MICROSOFT.comSunday, December 07, 1997 6:47 PM翻译:zhou, 2002 自从1997年7月4日抵达火星表面后,火星探路者(The Mars Pathfinder)一直被大肆宣称为“完美的”。它确实包含了很多成功之处,从它那非传统的着陆方式――被巨大的气囊包裹着蹦蹦跳跳着陆,然后释放出 火星
2012-07-14 10:18:46 2464 2
转载 与vxWorks相比,Linux究竟有那些优势?
2001年IBM大张旗鼓的宣布支持Linux,并投入10亿美金用于Linux相关开发。 【陈怀临注:是的,没有IBM Linux Research Center的R&D投入,Linux在服务器市场方面的发展绝无今日之局面】 最近的Cisco抛弃了其专有的IOS核心,在 ASR1000的控制平面软件上采用了Linux为基础平台。【陈怀临注:思科在OS方面目前比较乱了。是的,
2012-07-14 09:49:00 16880 1
转载 几次由于软件失误造成的航天事故
1. Ariane 5 爆炸, 调查小组后来分析是由于导航软件部分的一个类型转行造成的,将一个64位的浮点数转换成了16位的有符号整数。 2. Mars Pathfinder到达火星后不久,持续不断的重启,当时很多人都以为是因为系统做的工作太多,超负荷了才不断重启的。但在后来的一次IEEE Real-Time Systems Symposium会议上,VxWorks(pathfind
2012-07-14 09:46:25 6494
转载 异步通知fasync
linux设备驱动归纳总结(三):7.异步通知fasyncxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx异步通知fasync是应用于系统调用signal和sigaction函数,下面我会使用signal函数。简单的说,signal函数就是让一个信
2012-07-14 09:23:07 1361
转载 异步通知
异步通知意味着设备可以通知应用程序自身可被访问,实现了异步IO。 在ldd3中给出了设备驱动实现异步信号的详细操作顺序:1.当发出 F_SETOWN,什么都没发生,除了一个值被赋值给 filp->f_owner.2.当 F_SETFL 被执行来打开FASYNC, 驱动的 fasync方法被调用.这个方法被调用无论何时 FASYNC的值在 filp->f_fla
2012-07-13 09:52:08 586
原创 详细注释FL2440按键中断驱动(含poll机制),测试成功
平台:FL2440 内核版本linux 2.6.28效果:没有按键时,程序进入休眠,每5秒打印超时信息。按键时响应中断,并输出是按下还是松开。转载注明:http://blog.csdn.net/bbs598598/article/details/7742052#include /*模块有关的*/#include /*内核有关的*/#include /*文件系统有关的*/
2012-07-12 22:23:52 2094
转载 poll机制分析(韦东山)
poll机制分析所有的系统调用,基于都可以在它的名字前加上“sys_”前缀,这就是它在内核中对应的函数。比如系统调用open、read、write、poll,与之对应的内核函数为:sys_open、sys_read、sys_write、sys_poll。一、内核框架:对于系统调用poll或select,它们对应的内核函数都是sys_poll。分析sys_poll,即可理解p
2012-07-12 14:38:30 867
转载 与中断有关的数据结构
1.概述通过前文,我们已经知道了中断通常由上下两部分组成。在上部分,也就是中断处理程序,完成中断请求的响应以及完成那些对时间要求紧迫的工作;而在下部分,通常完成那些被推后的工作,因为这部分工作对时间的要求相对宽松一些。通过了解上下两部分的工作情况,可以更好的理解中断这个概念。从下半部分执行机制来看——不管是tasklet还是工作队列——这些推后的工作总是在上半部分被调用,然后交给内核在适当
2012-07-11 20:14:18 1499
转载 fl2440按键中断驱动
#include #include #include #include #include #include #include #include #include #include #include //copy_to_user#include //内核时钟#include //atomic_t#include //
2012-07-11 15:56:22 634
转载 转:一个相当详细的MINI2440按键驱动详解
/*mini2440_buttons_my.c*//*后面加了_my*//*按键驱动程序*//*mini2440所用到的按键资源*//**************************************************//* 按键 对应的IO寄存器 对应的中断引脚*//* K1 GPG0
2012-07-11 13:42:49 944
转载 linux中断之中断注册
专业的linux驱动开发离不开中断处理,在处理中断,首先要注册中断,在linux下通过request_irq来注册中断的,不同内核版本,注册中断所需要的参数也不同,本文以linux-2.6.34为例,对比老版本进行说明。 request_irq()函数在include/linux/interrupt.h中定义,原型为: static inline int __must_
2012-07-11 13:37:46 5742 1
转载 C语言之结构体
C语言中,结构体是一种很常用的数据类型。简单而又复杂,能够用好它实属不易。下面总结下它的常见用法及容易出错的地方。一、关于结构体的声明1、匿名声明。如:struct { int i,j;}point;说明:>>这段代码的含义是,声明一个无名(anonymous)的结构体,并创建了一个结构体变量point。如果这段声明是放在全局域内,那么p
2012-07-10 16:35:37 952
转载 【12条说话艺术】
1急事,慢慢地说;2小事,幽默地说;3没把握的事,谨慎地说;4没发生的事,不要胡说;5做不到的事,别乱说;6伤害人的事,不能说;7伤心的事,不要见人就说;8别人的事,小心地说;9自己的事,听别人怎么说;10尊长的事,多听少说。11夫妻的事,商量着说。 12孩子们的事,开导着说。
2012-07-10 14:41:41 924
转载 关于void*
void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。 void几乎只有“注释”和限制程序的作用,定义一个void变量没有意义,不妨试着定义: void a; 这行语句编译时会出错,提示“illegal use of type 'void'”。不过,即使void a的编译不会出错,它也没有任何实际意义。 void真正发挥的作
2012-07-10 09:51:45 626
转载 vxWorks中对时间的精确统计
原始资料来源:http://topic.csdn.net/u/20070703/12/d94a3121-4272-4715-9de4-d39e201f6f56.html我查了一下,好多网友也给出了不少关于获得毫秒级时间的方法和建议,粘贴如下, 供大家参考: 帖1: 如果支持Timestamp,BSP应提供以下函数 sysTimestampConnect()
2012-07-09 14:45:22 11688 2
转载 udev轻松上路 (做2.6移植的朋友不要错过:)
第一、什么是udev? 这篇文章UDEV Primer给我们娓娓道来,花点时间预习一下是值得的。当然,不知道udev是什么也没关系, 把它当个助记符好了,有了下面的上路指南,可以节省很多时间。我们只需要树立一个信念:udev很简单! 嵌入式的udev应用尤其简单。 第二、为什么udev要取代devfs? 这是生产关系适应生产力的需要,udev好,devfs坏,用好的
2012-07-07 16:31:13 2073
转载 cdev结构
在Linux2.6内核中一个字符设备用cdev结构来描述,其定义如下:struct cdev { struct kobject kobj; struct module *owner; //所属模块 const struct file_operations *ops; //文件操作结构,在写驱动时,
2012-07-07 15:47:15 750
原创 关于LED中的down()up()
down(&leds_lock); //为什么这里 要down()和up(),我看过韦东山讲同步与互斥那个视频时,将up()放在了close中,还有就是 case2中为什么没有使用up()和down(),总之我这一块很迷惑,不知道这个程序是怎么实现的 不同次设备号控制不同的led,不理解这里的down()和up()作用是什么。请老师解答!!!!
2012-07-05 22:12:16 1977
转载 class_create(),device_create自动创建设备文件结点 .
从linux内核2.6的某个版本之后,devfs不复存在,udev成为devfs的替代。相比devfs,udev有很多优势,在此就不罗嗦了,提醒一点,udev是应用层的东东,不要试图在内核的配置选项里找到它;加入对udev的支持很简单,以作者所写的一个字符设备驱动为例,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用 class_device_cre
2012-07-05 19:13:44 4612
转载 字节对齐
gcc 中的"__attribute__ ((packed))" __attrubte__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐。#define __u8 unsigned char#define __u16 unsigned short/* __attribute__ ((pac
2012-07-04 08:47:24 1022
转载 VxWorks下使用双向链表lstLib的小例子
#include #include #include typedef struct _Queue{ NODE * next; NODE * prev; int age; char name[255];} QUEUE;LIST list;void TestList(){ QUEUE *p; int i
2012-07-03 15:45:39 3446
原创 vxworks错误调试
alignmentException current instruction address: 0x00082024Machine Status Register: 0x0000b030Data Access Register: 0x02716a0bCondition Register: 0x20000048Data storage interrupt Register: 0x
2012-07-02 22:14:54 2448 2
转载 Linux Shell编程基础
linux系统下给命令指定别名alias命令用法: 在linux系统中如果命令太长又不符合用户的习惯,那么我们可以为它指定一个别名。虽然可以为命令建立“链接”解决长文件名的问题,但对于带命令行参数的命令,链接就无能为力了。而指定别名则可以解决此类所有问题。只要举一些例子就可以了: alias l='ls -l' ;用 l 代替 ls -l 命令(Xenix 下就有类似的 l 命令)
2012-07-01 21:56:30 522
转载 嵌入式Linux启动过程中的问题积累
1.Bad Magic Number ## Booting image at 33000000 ...Bad Magic NumberOMAP5912 OSK # (tftp下载好kernel的uImage后就停止在这,不能启动kernel)问题原因:启动参数设置错误,0x30000000处不可以执行。有的开发板sdram不是在0x33000000,所以不能把kerne
2012-07-01 21:09:19 675
原创 '/etc/init.d/rcS'启动打不开
'/etc/init.d/rcS' 文件系统中有这个文件啊 怎么报错说没有呢? 用光盘里面的内核镜像就不会出现这个问题 自己移植的内核刷上去就会这样 怎么办啊?以前也移植成功过没出现这个问题啊 已经搞了N天了快崩溃了 急急急补充一下 rcS 以及 init.d 和 etc 目录的权限都是 777原因找到了 是这个选项 choose
2012-07-01 20:44:10 4736
原创 我的第一个简单的linux打印输出驱动(文件自动注册有问题)
平台:linux 2.6.28.7#include #include #include #include #include #include #include #include /*#include #include #include #include */static struct class *firstdrv_class;s
2012-07-01 20:39:50 859 1
转载 linux驱动编写之十三(设备模型之sysfs,bus,device,driver源代码分析)
sysfs文件系统存在于内存中,是一个虚拟文件系统,其提供了kobject对象层次的视图,可以让用户以一个简单文件系统的方式来观察系统中的各种设备的拓扑结构,使用属性对象,kobject可以导出文件的方式,将内核变量提供给用户读取或者写入。在2.6内核的系统中,都拥有sysfs文件系统。sysfs将kobject对象与目录项紧密联系,通过kobject结构体中的dentry字段实现的。sy
2012-07-01 18:30:40 1134
转载 class_create(),class_device_create()或device_create()自动创建设备文件结点
从linux内核2.6的某个版本之后,devfs不复存在,udev成为devfs的替代。相比devfs,udev有很多优势,在此就不罗嗦了,提醒一点,udev是应用层的东东,不要试图在内核的配置选项里找到它;加入对udev的支持很简单,以作者所写的一个字符设备驱动为例,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用 class_device_creat
2012-07-01 17:26:28 669
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人