上一页 1 ··· 7 8 9 10 11 12 下一页
  2012年10月15日
摘要: 在写这篇blog之前,不得不感慨一句:纸上得来终觉浅,绝知此事要躬行.作为EE出身的,虽然好久好久没用汇编写单片机的中断了,但自我感觉对中断的理解还是比较深入的,本以为在GNU ARM汇编下搞个中断会很容易,谁知道断断续续花了我几周.完全用汇编写中断和用c中的_irq写中断还是有区别的,谁用谁知道.还是那句话:深入细节是必须的,也是值得的. 这一篇blog的理论知识主要来源于:《ARM System Developer's Guide》. ARM的异常和相应的模式之间的对应关系见下表:当一个异常导致模式的改变时,内核自动地:1、把cpsr保存到相应模式下的spsr2、把pc保存到相应模 阅读全文
posted @ 2012-10-15 22:16 Daniel.G 阅读(951) 评论(0) 推荐(0)
摘要: 这一篇的知识来源全部来自《ARM System Developer's Guide》 从编程人员的视角来看,arm核是由数据总线连接的功能单元组成,如下图所示: 数据通过数据总线流向处理器核心,这里的数据可以是将要执行的指令,也可以是数据项.上面的图是Von Neumann体系的arm核,数据项和指令共用同一总线.而h哈佛结构体系的arm核就会用两个不同的总线. 就像所有的RISC处理器,arm采用load-store体系结构.也就是说它含有两条不同的指令类型来出入处理器.loar指令将数据从内存拷贝到寄存器,store指令是将数据从寄存器拷贝到内存.没有直接操作内存中... 阅读全文
posted @ 2012-10-15 22:14 Daniel.G 阅读(532) 评论(0) 推荐(0)
摘要: GNU的汇编器是GNU Tools的一部分,可以用来ARM的汇编语言源代码编译为二进制文件.关于GNU汇编器的介绍可以搜索《GNU Assembler Manual》.这里我们只是做一个简短的介绍,对GNU汇编器有一个大概的认识,同时通过两个例子了解一下GNU ARM汇编. 给出一个模板文件:[cpp]view plaincopyprint?.text;Executablecodefollows_start:.global_start;"_start"isrequiredbythelinker.globalmain;"main"isourmainprog 阅读全文
posted @ 2012-10-15 21:33 Daniel.G 阅读(948) 评论(0) 推荐(0)
摘要: 在大学的时候,汇编就是学的很烂.一是对汇编这门语言没概念,二是那些指令集很难记清楚,用的机会也少,自然学的不好.但是现在觉得相当有必要重头学习一下汇编.部分原因我在上一篇写完设备模型的总结时提到了而.最近在看一本书《ARM:Assembly Language Programming》,作者是Peter Knaggs & Stephen Welsh.作者在开头也提出学习汇编的必要性和重要性,借他们的话重新说一下: 他们首先用三个问句来引出为什么要学习汇编: 外科医生为了知道手术刀的用法而需要学习冶金吗?飞行员需要学习热力学理论来理解飞机引擎是如何工作的?报社的记者要学习电子学来理解照.. 阅读全文
posted @ 2012-10-15 21:31 Daniel.G 阅读(480) 评论(0) 推荐(0)
  2012年10月14日
摘要: 最近在分析u-boot的源代码,看到这一行:.balignl 16,0xdeadbeef不理解了,不知道为什么要这样写,0xdeadbeef,明显是个单词组,写在这里有何意义呢?然后在查阅了众多资料的时候才晃然大悟。下面我一步步来说明:首先要弄明白.balignl的意思,这个其实应该算是一个伪操作符,伪操作符的意思就是机器码里,并没有一个汇编指令与其对应,是编译器来实现其功能的。.balignl是.balign的变体,.balign是意思是,在以当前地址开始,地址计数器必须是以第一个参数为整数倍的地址为尾,在前面记录一个字节长度的信息,信息内容为第二个参数。.balign 8, 0xde它的意 阅读全文
posted @ 2012-10-14 19:58 Daniel.G 阅读(438) 评论(0) 推荐(0)
  2012年10月13日
摘要: linux支持多种文件系统类型,为了对各类文件系统进行统一管理,linux引入了虚 拟文件系统VFS,为各类文件系统提供一个统一的应用编程接口。文件系统类型根据存储设备的硬件特性,系统需求,不同的文件系统类型有不同的应用场合。在嵌入式linux应用中,住哟啊的存储设备为RAM和FLASH,常用的基于存储设备的文件系统类型包括:jffs2,yaffs,cramfs,ramdisk,ramfs等。/************************************************************/基于FLASH的文件系统NOR FLASH: 存放程序(速度快)NAND FLA 阅读全文
posted @ 2012-10-13 20:21 Daniel.G 阅读(654) 评论(0) 推荐(0)
摘要: 内核构成分析uImage构成:arm linux内核映像uImage生成过程图解:u-boot认为zImage为自解压文件zImage:* (decompress code) Head.s misc.s * compressed vmlinuxvmlinux:* (vmlinux-init)arch/arm/kernel/head.o* (vmlinux-main)driver/build-in.o mm/build-in.o ......* kallsyms.o(符号)linux内核的启动大致可以划分为3个阶段1 解压缩2 初始化3 启动应用程序 阅读全文
posted @ 2012-10-13 19:06 Daniel.G 阅读(1051) 评论(0) 推荐(0)
摘要: 系统组成:Bootloader, Boot parameters, Kernel, Root filesystem嵌入式linux系统有linux内核与根文件系统两部分构成,两者缺一不可。内核制作:1:清除原有配置与中间文件X86:make distcleanarm:make distclean2 配置内核(copy其他类似的配置文件为.config)x86:make menuconfigarm:make menuconfig ARCH=arm /* nfs与ramdisk启动的区别 */3 编译内核x86:make bzImagearm:make uImage ARCH=arm CROSS_ 阅读全文
posted @ 2012-10-13 17:57 Daniel.G 阅读(589) 评论(0) 推荐(0)
  2012年10月12日
摘要: u-boot移植软硬件配置:Bootloader依赖于:具体的cpu体系,具体的板级设备配置(芯片级移植,板级移植)板级移植:板级设备的配置文件位于linux/include/configs/<board_name>.h # <board_name>用相应的BOARD定义代替(例:smdk2410.h)移植方法:开始移植之前,首先要分析u-boot已经支持的开发板,选择出硬件配置最接近的开发板。选择的原则是,首先选择MCU相同的开发板,如果没有,则选择MPU相同的开发板。移植步骤1 在顶层Makefile中为开发板添加新的配置选项,使用已有的配置项目为例smdk2410 阅读全文
posted @ 2012-10-12 20:48 Daniel.G 阅读(433) 评论(0) 推荐(0)
摘要: 启动模式(自主模式)和下载模式(开发模式)uboot启动流程:开发板上电后,执行u-boot的第一条指令,然后顺序执行u-boot启动参数。看一下/board/smdk2410/u-boot.lds这个链接脚本,可以知道目标程序的各部分链接顺序。第一个要链接的是/cpu/arm920t/start.o,那么u-boot的入口指令一定位于start.s这个程序中。下面分两阶段介绍启动流程:第一阶段1 /cpu/arm920t/start.s这个汇编程序是u-boot的入口程序,开头就是复位向量的代码 复位启动子程序 设置cpu为SVC32模式 关闭看门狗 重新定位代码 初始化堆栈 跳转到star 阅读全文
posted @ 2012-10-12 19:58 Daniel.G 阅读(357) 评论(0) 推荐(0)
上一页 1 ··· 7 8 9 10 11 12 下一页