摘要: 在编写ioctl代码之前,需要选择对应不同命令的编号。为了防止对错误的设备使用正确的命令,命令号应该在系统范围内唯一,这种错误匹配并不是不会发生,程序可能发现自己正在试图对FIFO和audio等这类非串行设备输入流修改波特率,如果每一个ioctl命令都是唯一的,应用程序进行这种操作时就会得到一个EI 阅读全文
posted @ 2011-06-21 20:14 hnrainll 阅读(5561) 评论(1) 推荐(2) 编辑
摘要: inline 关键字用来定义一个类的内联函数,引入它的主要原因是用它替代C中表达式形式的宏定义。注意inline在c中最好写成__inline,否则编译会出错! 表达式形式的宏定义一例: #define ExpressionName(Var1,Var2) (Var1+Var2)*(Var1-Var2) 为什么要取代这种形式呢,且听我道来: 1. 首先谈一下在C中使用这种形式宏定义的原因,C语言是一个效率很高的语言,这种宏定义在形式及使用上像一个函数,但它使用预处理器实现,没有了参数压栈,代码生成 等一系列的操作,因此,效率很高,这是它在C中被使用的一个主要原因。 2. 这种宏定义在形式上类似于 阅读全文
posted @ 2011-06-21 19:40 hnrainll 阅读(576) 评论(0) 推荐(0) 编辑
摘要: 在嵌入式系统中,BootLoader 是用来初始化硬件,加载内核,传递参数。因为嵌入式系统的硬件环境各不相同,所以嵌入式系统的BootLoader 也各不相同,其中比较通用的是U-Boot,它支持不同的体系结构,如ARM,PowerPC,X86,MIPS 等。本文着重介BootLoader与内核之间 阅读全文
posted @ 2011-06-21 19:36 hnrainll 阅读(3450) 评论(0) 推荐(0) 编辑
摘要: 第一步:添加宏在include/configs/unsp2440.h中增加一项#define CONFIG_CMD_HELLOWORD 1第二步:添加实现在common/文件夹下建立helloword.c#include <common.h>#include <command.h>#ifdef CO 阅读全文
posted @ 2011-06-21 19:14 hnrainll 阅读(927) 评论(0) 推荐(0) 编辑
摘要: 在VIVI中添加自己的指令第一步:找到lib\command.c文件 按照help_cmd为模板添加一个自己的指令结构体,如下:user_command_t hello_cmd = { "hello", //添加的指令名 command_hello, //调用的函数 NULL, "hello \t\ 阅读全文
posted @ 2011-06-21 19:12 hnrainll 阅读(338) 评论(0) 推荐(0) 编辑
摘要: 杂项设备(misc device)杂项设备也是在嵌入式系统中用得比较多的一种设备驱动。在 Linux内核的include\linux目录下有Miscdevice.h文件,要把自己定义的miscdevice从设备定义在这里。其实是因为这些字符设备不符合预先确定的字符设备范畴,所有这些设备采用主编号10,一起归于miscdevice,其实misc_register就是用主标号10调用register_chrdev()的。也就是说,misc设备其实也就是特殊的字符设备,可自动生成设备节点。字符设备(char device)使用register_chrdev(LED_MAJOR,DEVICE_NAME 阅读全文
posted @ 2011-06-21 14:51 hnrainll 阅读(1022) 评论(0) 推荐(0) 编辑
摘要: 对于ARM体系来说,不同语言撰写的函数之间相互调用(mix calls)遵循的是 ATPCS(ARM-Thumb Procedure CallStandard),ATPCS主要是定义了函数呼叫时参数的传递规则以及如何从函数返回,关于ATPCS的详细内容可以查看ADS1.2Online Books ——Developer Guide的2.1节。这篇文档要讲的是汇编代码中对C函数调用时如何进行参数的传递以及如何从C函数正确返回。 不同于x86的参数传递规则,ATPCS建议函数的形参不超过4个,如果形参个数少于或等于4,则形参由R0,R1,R2,R3四个寄存器进行传递;若形参个数大于4,大于4的部. 阅读全文
posted @ 2011-06-21 14:03 hnrainll 阅读(2334) 评论(0) 推荐(0) 编辑