__asm__ __volatile__内嵌汇编用法简述 在阅读C/C++原码时经常会遇到内联汇编的情况,下面简要介绍下__asm__ __volatile__内嵌汇编用法。因为我们华清远见教学平台是ARM体系结构的,所以下面的示例都是用ARM汇编。
带有C/C++表达式的内联汇编格式为:
__asm__ __volatile__("Instruction List" : Output : Input : Clobber/Modify);
其中每项的概念及功能用法描述如下:
1、 __asm__
__asm__是GCC 关键字asm 的宏定义:
#define __asm__ asm
__asm__或asm 用来声明一个内联汇编表达式,所以任何一个内联汇编表达式都是以它开头的,是必不可少的。
2、Instruction List
Instruction List 是汇编指令序列。它可以是空的,比如:__asm__ __volatile__(""); 或 __asm__ ("");都是完全合法的内联汇编表达式,只不过这两条语句没有什么意义。但并非所有Instruction List 为空的内联汇编表达式都是没有意义的,比如:__asm__ ("":::"memory");
就非常有意义,它向GCC 声明:“内存作了改动”,GCC...

>> 阅读全文

参考2.6.14版本中的driver/usb/input/usbmouse.c。鼠标驱动可分为几个部分:驱动加载部分、probe部分、open部分、urb回调函数处理部分。
下文阴影部分为注解。
一、 驱动加载部分
static int __init usb_mouse_init(void)
{
int retval = usb_register(&usb_mouse_driver);//注册鼠标驱动
if (retval == 0)
info(DRIVER_VERSION ":" DRIVER_DESC);
return retval;
}
其中usb_mouse_driver的定义为:
static struct usb_driver usb_mouse_driver = {
.owner = THIS_MODULE,
.name = "usbmouse",
.probe = usb_mouse_probe,
.disconnect = usb_mouse_disconnect,
.id_table = usb_mouse_id_table,
};
如果注册成功的话,将会调用usb_mouse_probe。那么什么时候才算注册成功呢?
和其它驱动注册过程一样,只有在其对应的“总线”上发现匹配的“设备”才会调用probe。总线匹配的方法和具体总线相关,如:platform_bus_type中...

>> 阅读全文

序:我在讲嵌入式Linux驱动开发班的时候,发现不少学员对SD卡驱动这块比较感兴趣,课下来找我探讨。而在很多技术论坛,也有不少人问这方面的问题,所以就想写一下这方面的内容,希望对大家的学习能有所帮助。
前几天写了篇“基于S3C2410的SD卡linux驱动工作原理(一)”,说了下脱离操作系统如何在S3C2410上实现SD卡的读写。了解了脱离操作系统的工作原理后,现在可以思考linux是如何管理管理SD卡的了。Linux中SD驱动可以分为3层:块设备层(mmc_block.c ,mmc_sysfs.c,mmc_queue.c)、mmc协议层(mmc.c)、sd驱动层(s3c2410_sdi.c)。
下面从以下几个方面理解驱动:
1、s3c2410_sdi.c代码初始化过程;
2、SD卡块设备注册过程;
3、request及数据传输的实现。
下面介绍的过程参考的代码是我们华清远见培训中心在教学中使用的一套代码,内核版本是2.6.8,其它版本过程类似。
一、s3c2410_sdi.c代码初始化过程
二、SD卡块设备注册过程
三、request及数据传输的实现
今日活动推荐:
嵌入式Linux/WinCE/VxWorks免费技术讲座(上海9.20)
>> 阅读全文

我在讲嵌入式Linux驱动开发班的时候,发现不少学员对SD卡驱动这块比较感兴趣,课下来找我探讨。而在很多技术论坛,也有不少人问这方面的问题,所以就想写一下这方面的内容,希望对大家的学习能有所帮助。想了解SD卡的工作原理,首先需要了解的就是SD卡协议了,这个在网上可以轻松的下载到。在了解协议后,就可以看看下面的一些开发思路了。
首先看下脱离操作系统如何在S3C2410上实现SD卡的读写。过程可以分为3个大的步骤:初始化sd卡、写sd卡、读sd卡;下面的过程是我通过realview-MDK环境测试过的。
一、初始化sd卡
二、写sd卡
写sd卡可以分为3种方式:POLL、中断、DMA
(1)POLL写
(2)中断写
(3)DMA写
三、读sd卡
读sd卡也可分为3中方式:POLL、中断、DMA
(1) POLL读
(2)中断读
\
(3) DMA读
今日活动推荐:
嵌入式Linux/WinCE/VxWorks免费技术讲座(上海9.20,4600元realview MDK 企业版大奖等你拿)
嵌入式系统硬件设计免费技术讲座(北京9.21,ARM9 2410开发板+realvie...

>> 阅读全文

JFFS2是Flash上应用最广的一个日志结构文件系统。它提供的垃圾回收机制,不需要马上对擦写越界的块进行擦写,而只需要将其设置一个标志,标明为脏块,当可用的块数不足时,垃圾回收机制才开始回收这些节点。同时,由于JFFS2基于日志结构,在意外掉电后仍然可以保持数据的完整性,而不会丢失数据。
本文阐述如何在nand flash上实现JFFS2根文件文件系统。实验环境是:FS2410开发平台(我们嵌入式学院目前使用的也是这款开发板)及ubantu7.04主机环境。
由于使用的ubantu7.04的环境没有安装制作JFFS2文件系统镜像的工具mkfs.jffs2,所以首先在Linux系统中安装mkfs.jffs2工具,安装的过程如下:
1. 下载MTD工具包
本处使用的是mtd-snapshot-20050519.tar.bz2:
farsight#tar –jxvf mtd-snapshot-20050519.tar.bz2
farsight#cd mtd
farsight#./configure
farsight#make
farsight#make install
如果系统中没有安装ZLIB库,那么首先安装ZLIB库。具体的安装过程如下:
farsight#tar –zxvf zlib-1.2.3.tar.gz
farsight#cd zlib-1.2.3&l...

>> 阅读全文

随着linux系统及基于linux系统的嵌入式产品的蓬勃发展,Qt、Qt/Embedded、Qtopia的字样越来频繁的出现在我们面前。在华清远见的嵌入式培训课程中,Qt是嵌入式学院嵌入式工程师职业培训班>二期课程中嵌入式linux应用开发方面的重要内容。不少学员对QT方面的内容比较关注,所以在这里我们先对QT做一下简单介绍。
QT
Qt是一个多平台的C++图形用户界面应用程序框架,由挪威 TrollTech 公司出品。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的很容易扩展,并且允许真正地组件编程。
自1996年Qt进入商业领域开始,它已经成为全世界范围内数千种成功的应用程序的基础。Qt也是流行的Linux桌面环境KDE 的基础,KDE是所有主要的Linux发行版的一个标准组件。
基本上,Qt 同 X Window (X Window是一种用于UNIX系统的标准图形化用户界面)上的 Motif、Openwin、GTK 等图形界面库和 Windows 平台上的 MFC、OWL、VCL、ATL是同类型的东西,但是Qt 具有下列优点:
● 优良的跨平台特性
Qt支持Microsoft Windows 95/98, Microsoft Windows NT, Linux, Solaris, SunOS, H...

>> 阅读全文