随笔分类 -  嵌入式

摘要:对于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 阅读(2385) 评论(0) 推荐(0) 编辑
摘要:预定义变量 含义 $* 不包含扩展名的目标文件名称。 $+ 所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。 $< 第一个依赖文件的名称。 $? 所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。 $@ 目标的完整名称。 $^ 所有的依赖文件,以空格分开, 阅读全文
posted @ 2011-06-15 08:59 hnrainll 阅读(2661) 评论(0) 推荐(0) 编辑
摘要:( 转)嵌入式Linux驱动开发笔记 Linux驱动一般以模块module的形式来加载,首先需要把驱动编译成模块的形式。简单的例子, Begin of hello.c file #include <linux/init.h> #include <linux/kernel.h> #include <l 阅读全文
posted @ 2011-06-15 08:27 hnrainll 阅读(6333) 评论(0) 推荐(0) 编辑
摘要:网上有好多关于驱动的Makefile怎么写,驱动程序怎么运行,为什么驱动会没有main等等问题的问题的问题。下面我也给出我的驱动Makefile模板,这些东东都是在书籍和人家的研究成果上改进而来的,至于如何使用、怎么修改成自己的,大家就随意好了。驱动测试有两种方式,一为内核树之内,一为内核树以外,前 阅读全文
posted @ 2011-06-14 21:25 hnrainll 阅读(7203) 评论(0) 推荐(1) 编辑
摘要:不管是Windows还是Linux,驱动程序都扮演着重要的角色。应用程序只能通过驱动程序才能同硬件设备或系统内核通讯。Linux内核对不同的系统定义了标准的接口(API),应用程序就是通过这些标准的接口来操作内核和硬件。驱动可以被编译的内核中(build-in),也可以做为内核模块(Module)存 阅读全文
posted @ 2011-06-14 21:14 hnrainll 阅读(6304) 评论(3) 推荐(0) 编辑
摘要:在了解了ARM相关的汇编指令后,同时结合网上各位大虾的提点开始阅读u-boot的启动代码,现将分析过程记录如下 可执行文件及内存映射 我们可以把可执行文件分为2种情况:存放态和运行态 1.存放态:可执行文件经过烧到存储介质上(flash或磁盘)的分布,此时可执行文件通常有2部分组成,代码段和数据段, 阅读全文
posted @ 2011-06-14 08:45 hnrainll 阅读(3431) 评论(1) 推荐(1) 编辑
摘要:今决定认真分析一下u-boot的代码,但一开始就被“.balignl 16 0xdeadbeef”这条语句难住了,还好,google了一下,找到了《分析了一下 align 的用法》这篇文章,作者写得很好,看完后,我根据自己的实验结果,做了适当的更改,以让自己看起来更明白,把它记录如下:.align 就是用来对齐的,究竟怎么对齐,有啥情况?下面分析一下(一)$vim align1.s在新建的文件编辑以下代码:_start: b reset .byte 0x55 .byte 0xaareset: ldr r0, =0x53000000保存后,执行如下命令:$arm-linux-as align1. 阅读全文
posted @ 2011-06-14 08:18 hnrainll 阅读(2652) 评论(0) 推荐(0) 编辑
摘要:ARM指令集中,LDR通常都是作加载指令的,但是它也可以作伪指令。LDR伪指令的形式是“LDR Rn,=expr”。下面举一个例子来说明它的用法。COUNT EQU 0x40003100……LDR R1,=COUNTMOV R0,#0STR R0,[R1]COUNT是我们定义的一个变量,地址为0x40003100。这中定义方法在汇编语言中是很常见的,如果使用过单片机的话,应该都熟悉这种用法。LDR R1,=COUNT是将COUNT这个变量的地址,也就是0x40003100放到R1中。MOV R0,#0是将立即数0放到R0中。最后一句STR R0,[R1]是一个典型的存储指令,将R0中的值放到以 阅读全文
posted @ 2011-06-14 08:15 hnrainll 阅读(52647) 评论(0) 推荐(4) 编辑
摘要:说说这个.word的作用。 word expression就是在当前位置放一个word型的值,这个值就是expression 举例来说, _rWTCON: .word 0x15300000 就是在当前地址,即_rWTCON处放一个值0x15300000 翻译成intel的汇编语句就是: _rWTCON dw 0x15300000 例如:ldr r1, _rWTCON _rWTCON: .word 0x15300000 不是把地址0x1530 0000 上的内容传递到r1,是把地址_rWTCON上的内容放到r1,而地址_rWTCON上的内容是0x15300000。实际上就是把r1设置为0x153 阅读全文
posted @ 2011-06-13 21:36 hnrainll 阅读(4697) 评论(0) 推荐(0) 编辑
摘要:如题,烧写后总是出现不能识别FLASH型号问题。到H-JTAG网站下载了一个hfc文件查看,发现比friendlay提供的hfc文件多了一行SoftReset+++,于是修改H-Flasher_mini2440.hfc文件,在SCRIPT SECTION:后插入一行SoftReset+++,呵呵,可以正确识别了。将我修改后的H-Flasher_mini2440.hfc内容粘贴如下,以供参考,希望能对各位有所帮助。FLASH SECTION:SSTSST39VF1601MEMORY SECTION:16-BIT X 1-CHIP0x000000000x40000000XTAL SECTION:N 阅读全文
posted @ 2011-06-13 21:30 hnrainll 阅读(1400) 评论(0) 推荐(0) 编辑
摘要:以前用ARM的IDE工具,使用的是ARM标准的汇编语言。现在要使用GNU的工具,当然要了解一点GNU ARM汇编的不同之处。其实非常的简单,浏览一下文档然后再看看程序就完全可以搞定了,或者你硬着头皮看GNU ARM的汇编程序,用不了多少时间你就就可以无师自通了。ARM汇编语言源程序语句 ,一般由指令、伪操作、宏指令和伪指令作成。ARM汇编语言的设计基础是汇编伪指令,汇编伪操作和宏指令。 目前常用的ARM编译环境有2种:ARMASM: ARM公司的IDE中使用了CodeWarrior的编译器,绝大多数windows下的开发者都在使用这一环境,完全按照ARM的规定; GNU ARM ASM:GNU 阅读全文
posted @ 2011-06-11 20:14 hnrainll 阅读(8789) 评论(0) 推荐(0) 编辑
摘要:一、Linux内核镜像格式 Linux内核有多种格式的镜像,包括vmlinux、Image、zImage、bzImage、uImage、xipImage、bootpImage等. (1)kernel镜像格式:vmlinux vmlinuz是可引导的、可压缩的内核镜像,vm代表Virtual Memo 阅读全文
posted @ 2011-06-10 21:36 hnrainll 阅读(9959) 评论(0) 推荐(0) 编辑
摘要:yaffs2 老版本不支持2.6.36以上内核。 网上下载的yaffs2常见版本(点击http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/下方的Download GNU tarball进行下载)一般不支持2.6.36/37。但2.6.36一下版本依然可以使用。 最 阅读全文
posted @ 2011-06-10 19:59 hnrainll 阅读(5129) 评论(0) 推荐(0) 编辑
摘要:mknod 用途 创建特殊文件。 mknod Name { b | c } Major Minor 创建 FIFO(已命名的管道) mknod Name { p } 描述 mknod 命令建立一个目录项和一个特殊文件的对应索引节点。第一个参数是 Name 项设备的名称。选择一个描述性的设备名称。mk 阅读全文
posted @ 2011-06-10 14:01 hnrainll 阅读(34463) 评论(0) 推荐(2) 编辑
摘要:转自:http://blog.chinaunix.net/space.php?uid=20543672&do=blog&cuid=460882 热插拔有 2 个不同角度来看待热插拔: 从内核角度看,热插拔是在硬件、内核和内核驱动之间的交互。 从用户角度看,热插拔是内核和用户空间之间,通过调用用户空间 阅读全文
posted @ 2011-06-10 11:38 hnrainll 阅读(5032) 评论(0) 推荐(1) 编辑
摘要:分析过mdev(udev的BusyBox简化版)源码的都知道mdev的基本原理: a、执行mdev -s命令时,mdev扫描/sys/block(块设备保存在/sys/block目录下,内核2.6.25版本以后,块设备也保存在/sys/class/block目录下。mdev扫描/sys/block是为了实现向后兼容)和/sys/class两个目录下的dev属性文件,从该dev属性文件中获取到设备编号(dev属性文件以"major:minor\n"形式保存设备编号),并以包含该dev属性文件的目录名称作为设备名device_name(即包含dev属性文件的目录称为device 阅读全文
posted @ 2011-06-10 11:18 hnrainll 阅读(15180) 评论(0) 推荐(0) 编辑
摘要:BusyBox 的诞生 BusyBox 最初是由 Bruce Perens 在 1996 年为 Debian GNU/Linux 安装盘编写的。其目标是在一张软盘上创建一个可引导的 GNU/Linux 系统,这可以用作安装盘和急救盘。一张软盘可以保存大约 1.4-1.7MB 的内容,因此这里没有多少 阅读全文
posted @ 2011-06-10 10:46 hnrainll 阅读(2045) 评论(0) 推荐(1) 编辑
摘要:BusyBox 是标准 Linux 工具的一个单个可执行实现。BusyBox 包含了一些简单的工具,例如 cat 和 echo,还包含了一些更大、更复杂的工具,例如 grep、find、mount 以及 telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀.简单的说BusyBo 阅读全文
posted @ 2011-06-10 10:33 hnrainll 阅读(14070) 评论(0) 推荐(3) 编辑
摘要:该文件在进入shell的时候调用,也就是说这是用户相关的.# /etc/profile: system-wide .profile file for the Bourne shellsecho "Processing /etc/profile..."# 从arm9.net拷贝# Ash profile # vim: syntax=sh# No core files by default#ulimit -S -c 0 > /dev/null 2>&1export LD_LIBRARY_PATH=/lib:/usr/lib# #id -un是打印输出当前的用 阅读全文
posted @ 2011-06-10 10:30 hnrainll 阅读(4161) 评论(0) 推荐(0) 编辑
摘要:MINI2440启动配置文件/etc/init.d/rcS文件分析 2011年2月5日 mail:174997990@qq.com Mini2440启动配置文件说明 对于mini2440,虽然root_qtopia这个文件系统的GUI是基于Qtopia的,但其初始化启动过程却是由大部分由busybo 阅读全文
posted @ 2011-06-10 10:15 hnrainll 阅读(5493) 评论(0) 推荐(0) 编辑