09 2013 档案

自己写bootloader(一)
摘要:bootloader功能目标:启动内核1.从Flash上把内核读入内存 1>读Flash: a.NORFLASH:读内存 b.NANDFLASH: 2>初始化内存(SDRAM需要初始化)、时钟、关闭看门狗、其他...2.启动(跳转到内核所在的地址执行) 1>设置参数,在某个约定的地址放上参数 2>跳转执行 最简单的bootloader的编写步骤:1.初始化硬件:关闭看门狗、设置时钟、设置SDRAM、初始化NAND FLASH2.如果bootloader比较大,要把它重定位到SDRAM3.把内核从NAND FLASH读到SDRAM4.设置"要传递给内核的参数&q 阅读全文

posted @ 2013-09-30 14:35 屁屁侠 阅读(569) 评论(0) 推荐(0) 编辑

输入子系统架构分析
摘要:内 核的输入子系统是对分散的,多种不同类别的输入设备(如键盘,鼠标,跟踪球,操纵杆,触摸屏,加速计和手写板)等字符设备进行统一处理的一层抽象,就是在 字符设备驱动上抽象出的一层。输入子系统包括两类驱动程序:事件驱动程序和设备驱动程序。事件驱动程序负责和应用程序的接口,而设备驱动程序负责和底层输 入设备的通信。鼠标事件生成文件mousedev属于事件驱动程序,而PS/2鼠标驱动程序是设备驱动程序。事件驱动程序是标准的,对所有的输入类都是可 用的,所以要实现的是设备驱动程序而不是事件驱动程序。设备驱动程序可以利用一个已经存在的,合适的事件驱动程序通过输入核心和用户应用程序接口。输入子系统带来了如下 阅读全文

posted @ 2013-09-29 18:06 屁屁侠 阅读(700) 评论(0) 推荐(0) 编辑

初学者学习编程语言的烦恼
摘要:http://blog.sina.com.cn/s/blog_94479040010158l9.html1、抄代码:抄代码,刚开始写,抄错属于很正常的现象2、模仿写:自己会写一些简单的代码,但还不太清楚怎样下手写一个完整的代码模块,所以要模仿着写3、模仿改:软件工作中debug占据了工程师大部分时间,这时由于没有经验和思路,所以建议模仿着改4、勤调试:自己试着写一些代码,通过不断调试来验证自己的一些想法,继续思考,再次验证,来回折腾5、看 n遍:出错或遇到问题时,将代码从头看到尾,看了一遍又一遍,直到快全部记住时,总能找出问题原因,相信方法总会比问题多6、找感觉:主动找到写代码的感觉和成就感, 阅读全文

posted @ 2013-09-27 19:54 屁屁侠 阅读(166) 评论(0) 推荐(0) 编辑

关于程序员成长的一点思考
摘要:关于程序员成长的一点思考新闻来源:51CTO 程序员的我们,是否想过今后的路该怎么走、如何发展、技术怎样提高?其实这也是我一直在思考的问题。下面就此问题,分享下我的看法。因为我阅历有限,有什么说的不对的,大家一起喷! 一、程序员应该打好基础 1. 现在开发工具众多、语言泛滥,经常听人说”不学CC++神马都是浮云”、”CC++才是万王之王”,CC++就真比PHP、Lua、AS、JAVA牛吗? 其实不在于语言本身,而在于CC++依附的平台。因为最靠近操作系统,所以能发挥其它语言不具有的性能优势,而且很多数据结构、算法、特殊功能 类,CC++是不提供的,需要自己实现。这时就需要自己去温习”数据结.. 阅读全文

posted @ 2013-09-27 19:45 屁屁侠 阅读(226) 评论(0) 推荐(0) 编辑

堆和栈的区别
摘要:一、预备知识 程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 : 1、栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。 其操作方式类似于数据结构中的栈。 2、堆区(heap):一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回 收 。 注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区)(static):全局变量和静态变量的存储是放在一块的。 初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另 一块区域。 程序结束后由系统释放。 4、文字常量区 :常量字... 阅读全文

posted @ 2013-09-27 18:21 屁屁侠 阅读(530) 评论(0) 推荐(0) 编辑

c语言中struct的内存对齐
摘要:为了让CPU能够更舒服地访问到变量,struct中的各成员变量的存储地址有一套对齐的机制。这个机制概括起来有两点:第一,每个成员变量的首地址,必须是它的类型的对齐值的整数倍,如果不满足,它与前一个成员变量之间要填充(padding)一些无意义的字节来满足;第二,整个struct的大小,必须是该struct中所有成员的类型中对齐值最大者的整数倍,如果不满足,在最后一个成员后面填充。各种类型的变量的align值如下,参考的是wikipedia的页面:--------------------------------------------------------------------------- 阅读全文

posted @ 2013-09-27 14:12 屁屁侠 阅读(2484) 评论(0) 推荐(0) 编辑

内存对齐与ANSI C中struct型数据的内存布局
摘要:当在C中定义了一个结构类型时,它的大小是否等于各字段(field)大小之和?编译器将如何在内存中放置这些字段?ANSI C对结构体的内存布局有什么要求?而我们的程序又能否依赖这种布局?这些问题或许对不少朋友来说还有点模糊,那么本文就试着探究它们背后的秘密。 首先,至少有一点可以肯定,那就是ANSI C保证结构体中各字段在内存中出现的位置是随它们的声明顺序依次递增的,并且第一个字段的首地址等于整个结构体实例的首地址。比如有这样一个结构体: struct vector{int x,y,z;} s; int *p,*q,*r; struct vector *ps; p = &s.x; q = 阅读全文

posted @ 2013-09-27 13:39 屁屁侠 阅读(262) 评论(0) 推荐(0) 编辑

glibc中malloc()的空间overhead
摘要:在linux下调用malloc()分配内存的时候,实际占用的内存与请求的内存尺寸的关系是什么呢,这个需要研究一下glibc中malloc()的实现。现在常见linux发行版中带的glibc中采用的都是Doug Lea的实现,下面的分析取自他的2.8.4版本的malloc.c。glibc对内存的管理是以chunk为单位的,未分配的chunk之间用双向链表连接成一个环,遍历的时候用指针遍历,已分配的chunk在其首部有chunk的大小,并以此字节数做遍历。每个chunk的首部要放置一个叫做malloc_chunk的struct,故每个chunk的大小至少是这个struct的大小,如果分配的空间或者 阅读全文

posted @ 2013-09-26 18:47 屁屁侠 阅读(1128) 评论(0) 推荐(0) 编辑

shell学习笔记之命令(四)
摘要:命令的类型:1>.外部命令:在命令提示符中执行的普通命令。2>.内置命令:内置命令是在shell内部实现的。1.break命令#!/bin/shrm -rf fred*echo > fred1echo > fred2mkdir fred3echo > fred4for file in fred*do if [ -d "$file" ]; then break; fidoneecho first directory starting fred was $filerm -rf fred*exit 02.冒号:1.空命令,用于被简化逻辑,相当于tru 阅读全文

posted @ 2013-09-26 11:47 屁屁侠 阅读(362) 评论(0) 推荐(0) 编辑

字符设备驱动笔记——定时器防抖动(十)
摘要:1.定时器:1).超时时间2).处理函数#include #include #include #include #include #include #include #include #include #include #include #include static struct class *sixthdrv_class;static struct class_device *sixthdrv_class_dev;volatile unsigned long *gpfcon;volatile unsigned long *gpfdat;volatile unsigned ... 阅读全文

posted @ 2013-09-24 22:51 屁屁侠 阅读(381) 评论(0) 推荐(0) 编辑

shell学习笔记之控制结构(三)
摘要:1.if语句if conditionthen statementsesle statementsfi例:#!/bin/shecho "Is it morning? Please answer yes or no"read timeofdayif [ $timeofday = "yes" ]; then echo "Good morning"else echo "Good afternoon"fiexit 02.elif语句#!/bin/shecho "Is it morning? Please answe 阅读全文

posted @ 2013-09-24 18:45 屁屁侠 阅读(468) 评论(0) 推荐(0) 编辑

shell学习笔记之条件(二)
摘要:test或者[#检查文件是否存在if test -f read.cthen...fiif [ -f read.c ]then...fi#如果then和if在同一行上,就应该用;把if和then分开if [ -f read.c ];then...fi注意:1.if空格[空格xxx空格]都有空格2.test命令的退出码(表明条件是否满足),决定是否要执行后面的代码------------------------------------------------------------------------------字符串比较string1 == string2string1 != string2 阅读全文

posted @ 2013-09-24 18:16 屁屁侠 阅读(268) 评论(0) 推荐(0) 编辑

shell学习笔记之变量(一)
摘要:一、普通变量1.使用变量之前通常并不需要事先声明,通常赋值的时候创建他们2.默认所有的变量都被看做字符串,并且以字符串存储3.变量区分大小写4.变量名前面添加$符号来访问变量,赋值的时候只需要使用变量名5.如果字符串中包含空格,就必须用引号括起来6.等号两边不能有空格#!/bin/shmyvar="Hi there"echo $myvarecho "$myvar"echo '$myvar' #不会发生替换echo \$myvar #不会发生替换echo Enter some textread myvarecho '$myvar&# 阅读全文

posted @ 2013-09-24 15:56 屁屁侠 阅读(428) 评论(0) 推荐(0) 编辑

内核线程、用户进程、用户线程
摘要:内核线程、用户进程、用户线程从kernel创建init 进程之后,内核就不再主动占有cpu了。只有当进程主动要求和中断到来时,内核才动一动,很快又把cpu还给合适的进程。Linux上进程分3种,内核线程、用户进程、用户线程。内核线程内核线程拥有进程描述符、PID、进程正文段、核心堆栈;因为内核线程不访问用户空间,只操作内核空间内存,而所有内核线程的内核空间都是一样的。这样就省下了一个mm域的内存。用户进程拥有进程描述符、PID、进程正文段、核心堆栈 、用户空间的数据段和堆栈用户线程拥有进程描述符、PID、进程正文段、核心堆栈,同父进程共享用户空间的数据段和堆栈;用户线程也可以通过exec函数族 阅读全文

posted @ 2013-09-24 11:11 屁屁侠 阅读(284) 评论(0) 推荐(0) 编辑

字符设备驱动笔记——同步互斥阻塞(九)
摘要:一、同步互斥阻塞1. 原子操作原子操作指的是在执行过程中不会被别的代码路径所中断的操作。常用原子操作函数举例:atomic_t v = ATOMIC_INIT(0); //定义原子变量v并初始化为0atomic_read(atomic_t *v); //返回原子变量的值void atomic_inc(atomic_t *v); //原子变量增加1void atomic_dec(atomic_t *v); //原子变量减少1int atomic_dec_and_test(atomic_t *v); //自减操作后测试其是否为0,为0则返回true,否则返回false。2. 信号量信号量(sema 阅读全文

posted @ 2013-09-23 19:01 屁屁侠 阅读(738) 评论(0) 推荐(0) 编辑

字符设备驱动笔记——异步通知(八)
摘要:一、信号处理函数的要点:1.注册一个信号处理函数2.发信号,谁发3.发给谁4.怎么发#include #include void my_signal_fun(int signum){ static int cnt = 0; printf("signal = %d, %d times\n", signum, ++cnt);}int main(int argc, char **argv){ signal(SIGUSR1, my_signal_fun); while (1) { sleep(1000); } return 0;}二、执行... 阅读全文

posted @ 2013-09-23 17:09 屁屁侠 阅读(508) 评论(0) 推荐(1) 编辑

字符设备驱动笔记——poll机制分析(七)
摘要:poll机制分析所有的系统调用,基于都可以在它的名字前加上“sys_”前缀,这就是它在内核中对应的函数。比如系统调用open、read、write、poll,与之对应的内核函数为:sys_open、sys_read、sys_write、sys_poll。一、内核框架:对于系统调用poll或select,它们对应的内核函数都是sys_poll。分析sys_poll,即可理解poll机制。1. sys_poll函数位于fs/select.c文件中,代码如下:asmlinkage long sys_poll(struct pollfd __user *ufds, unsigned int nf... 阅读全文

posted @ 2013-09-22 15:53 屁屁侠 阅读(421) 评论(0) 推荐(1) 编辑

字符设备驱动笔记——中断方式按键驱动之代码(六)
摘要://驱动程序#include #include #include #include #include #include #include #include #include #include #include static struct class *thirddrv_class;static struct class_device *thirddrv_class_dev;volatile unsigned long *gpfcon;volatile unsigned long *gpfdat;volatile unsigned long *gpgcon;volatile unsigne... 阅读全文

posted @ 2013-09-21 23:03 屁屁侠 阅读(461) 评论(0) 推荐(0) 编辑

字符设备驱动笔记——中断方式按键驱动之linux中断处理结构(五)
摘要:一、单片机下的中断处理 1)分辨是哪一个中断 2)调用处理函数 3)清中断二、linux下的中断处理1)/arch/arm/kernel/irq.casmlinkage void __exception asm_do_IRQ(unsigned int irq, struct pt_regs *regs){ struct pt_regs *old_regs = set_irq_regs(regs); struct irq_desc *desc = irq_desc + irq; /* * Some hardware gives randomly wrong int... 阅读全文

posted @ 2013-09-21 13:11 屁屁侠 阅读(1299) 评论(0) 推荐(0) 编辑

字符设备驱动笔记——中断方式按键驱动之linux异常处理结构(四)
摘要:1.中断方式获取按键值单片机:1)按键按下2)cup发生中断,跳转到异常向量入口执行3)b 函数 a.保存被中断的现场 b.执行中断处理函数 c.恢复linux:1)trap_init()函数构造异常向量2)vector_irq + stubs_offset 跳转,vector_irq用宏来实现 a.保存寄存器的值 b.asm_do_IRQ c.恢复2.linux异常处理结构分析---------------------------------------------trap_init()函数构造了异常向量把__vectors_start代码复制到vecto... 阅读全文

posted @ 2013-09-20 22:40 屁屁侠 阅读(857) 评论(0) 推荐(0) 编辑

字符设备驱动笔记——查询方式按键驱动(三)
摘要:second_drv.c#include #include #include #include #include #include #include #include #include #include static struct class *seconddrv_class;static struct class_device *seconddrv_class_dev;volatile unsigned long *gpfcon;volatile unsigned long *gpfdat;volatile unsigned long *gpgcon;volatile unsigned... 阅读全文

posted @ 2013-09-20 15:22 屁屁侠 阅读(470) 评论(0) 推荐(0) 编辑

字符设备驱动笔记(二)
摘要:怎么写LED驱动:①写框架②完善硬件的操作1>看原理图2>看2440手册3>单片机:直接操作物理地址 驱动程序:操作虚拟地址,物理地址用iorremap映射为虚拟地址myleds.c#include #include #include #include #include #include #include #include #include #include #define DEVICE_NAME "leds" /* 加载模式后,执行”cat /proc/devices”命令看到的设备名称 */#define LED_MAJOR 231 /* 主设备号 * 阅读全文

posted @ 2013-09-20 11:28 屁屁侠 阅读(668) 评论(0) 推荐(0) 编辑

字符设备驱动笔记(一)
摘要:1.调用关系 应用程序:open read write 应用层 ----------------------------------------- c库 (swi val)================================================= 内核: system call interface (在异常处理函数里面,根据发生中断的原因,调用 不同的处理函数) ----------------------------------------- sys_open sys_read sys_write (VFS Virtua... 阅读全文

posted @ 2013-09-19 23:21 屁屁侠 阅读(470) 评论(0) 推荐(0) 编辑

.balignl 16,0xdeadbeef浅析
摘要:http://zqwt.012.blog.163.com/blog/static/12044684201031102956976/最近在分析u-boot的源代码,看到这一行: .balignl 16, 0xdeadbeef不知道为什么要这样写,0xdeadbeef,明显是个单词组,写在这里有何意义呢?查阅了众多资料的时候才晃然大悟。下面我一步步来说明:首先要弄明白.balignl的意思,这其实应该算是一个伪操作符,伪操作符的意思就是机器码里,并没有一个汇编指令与其对应,是由编译器来实现其功能的。.balign是意思是:以当前地址为开始开始,找到第一次出现的以第一个参数为整数倍的地址,并将其作为 阅读全文

posted @ 2013-09-18 15:29 屁屁侠 阅读(4850) 评论(0) 推荐(0) 编辑

securecrt5序列号
摘要:securecrt5序列号Name: Apollo InteractiveCompany: Apollo InteractiveSerial Number: 03-50-023223License Key: ABMVSR NA46JN V3D2GG TJDKFQ ACS3S4 B18P54 ZPCQWM 9756P2Issue Date: 01-20-2006=====================================V5.5.0 Build 371这个是5.0的可用 阅读全文

posted @ 2013-09-16 22:24 屁屁侠 阅读(5671) 评论(0) 推荐(0) 编辑

为何C语言(的函数调用)需要堆栈,而汇编语言却不需要堆栈
摘要:http://www.cnblogs.com/myblesh/archive/2012/04/07/2435737.html之前看了很多关于uboot的分析,其中就有说要为C语言的运行,准备好堆栈。 而自己在Uboot的start.S汇编代码中,关于系统初始化,也看到有堆栈指针初始化这个动作。但是,从来只是看到有人说系统初始化要初始化堆栈,即正确给堆栈指针sp赋值,但是却从来没有看到有人解释,为何要初始化堆栈。所以,接下来的内容,就是经过一定的探究,试图来解释一下,为何要初始化堆栈,即: 为何C语言的函数调用要用到堆栈,而汇编却不需要初始化堆栈。 要明白这个问题,首先要了解堆栈的作用。 关于堆 阅读全文

posted @ 2013-09-16 11:32 屁屁侠 阅读(3806) 评论(1) 推荐(0) 编辑

输入子系统框架
摘要:drivers/input/input.c input_init > err = class_register(&input_class);static const struct file_operations input_fops = { .owner = THIS_MODULE, .open = input_open_file,};怎么读按键?input_open_file struct input_handler *handler = input_table[iminor(inode) >> 5]; new_fops = fops_get(handler-> 阅读全文

posted @ 2013-09-15 18:22 屁屁侠 阅读(341) 评论(0) 推荐(0) 编辑

一条进程的栈区、堆区、数据区和代码区在内存中的映射
摘要:一条进程的栈区、堆区、数据区和代码区在内存中的映射 1>栈区:主要用来存放局部变量, 传递参数, 存放函数的返回地址。.esp 始终指向栈顶, 栈中的数据越多, esp的值越小。 2>堆区:用于存放动态分配的对象, 当你使用 malloc和new 等进行分配时,所得到的空间就在堆中。动态分配得到的内存区域附带有分配信息, 所以你 能够 free和delete它们。 3>数据区:全局,静态和常量是分配在数据区中的,数据区包括bss(未初始化数据区)和初始化数据区。注意: 1)堆向高内存地址生长; 2)栈向低内存地址生长; 3)堆和栈相向而生,堆和栈之间有个临界点,称为stkbr 阅读全文

posted @ 2013-09-13 17:00 屁屁侠 阅读(5064) 评论(0) 推荐(2) 编辑

加载时域和运行时域
摘要:我们经常用到“存储地址和连接地址不同”(术语上称为加载时域和运行时域)的情况:大多机器上电时是从地址0开始运行的,但是从地址0运行程序在性能方面总有很多限制,所以一般在开始的时候,使用与位置无关的指令将程序本身复制到它的连接地址处,然后使用向pc寄存器赋值的方法跳到连接地址开始的内存上去执行剩下的代码。http://zqwt.012.blog.163.com/blog/static/120446842010113002939616/ 阅读全文

posted @ 2013-09-13 15:20 屁屁侠 阅读(6506) 评论(0) 推荐(0) 编辑

bss段和.data的是是非非
摘要:一般情况下,一个程序本质上都是由 bss段、data段、text段三个组成的——本概念是当前的计算机程序设计中是很重要的一个基本概念。而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配,存储单元占用空间大小的问题。在采用段式内存管理的架构中(比如intel的80x86系统),bss段(Block Started by Symbol segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域,一般在初始化时bss 段部分将会清零(bss段属于静态内存分配,即程序一开始就将其清零了)。比如,在C语言程序编译完成之后,已初始化的全局变量保存在.data 段中,未初始 阅读全文

posted @ 2013-09-13 15:08 屁屁侠 阅读(448) 评论(0) 推荐(0) 编辑

使用B或BL跳转时,下一条指令的地址的计算
摘要:1.text2.global _start3_start:4 b step15 step1:6 ldr pc, =step27 step2:8 b step2反汇编代码:0: eaffffff b 0x44: e59ff000 ldr pc, [pc, #0] ; 0xc8: eafffffe b 0x8c: 30000008 tsteq r0, #8 ; 0x8b跳转指令:它是个相对跳转指令,其机器码格式如下:[31:28]位是条件码;[27:24]位为"1010"(0xeaffffff为... 阅读全文

posted @ 2013-09-12 16:41 屁屁侠 阅读(2144) 评论(0) 推荐(0) 编辑

ARM GNU常用汇编语言介绍
摘要:ARM GNU常用汇编语言介绍ARM汇编语言源程序语句,一般由指令,伪操作,宏指令和伪指令组成.ARM汇编语言的设计基础是汇编伪指令,汇编伪操作和宏指令。伪操作,是ARM汇编语言程序里的一些特殊的指令助记符,其作用主要是为完成汇编程序做各种准备工作,在源程序运行汇编程序时处理,而在计算机运行期间没有有机器执行.也就是说,这些伪操作只是汇编过程中起作用,一旦汇编结束,伪操作的使命也就随之消失.宏指令,是一段独立的程序代码,可以插在程序中,它通过伪操作来定义。 1>宏在被使用之前必须提前定义好,宏之间可以互相调用,也可自己递归调用。 2>通过直接书写宏名来使用宏.并本具宏指令的格式输入 阅读全文

posted @ 2013-09-12 11:49 屁屁侠 阅读(2700) 评论(0) 推荐(0) 编辑

GNU风格 ARM汇编语法5
摘要:6、 GNU汇编程序中的常数 十进制数以非0数字开头,如:123和9876; 二进制数以0b开头,其中字母也可以为大写; 八进制数以0开始,如:0456,0123; 十六进制数以0x开头,如:0xabcd,0X123f; 字符串常量需要用引号括起来,中间也可以使用转义字符,如: “You are welcome!\n”; 当前地址以“.”表示,在GNU汇编程序中可以使用这个符号代表当前指令的地址; 表达式:在汇编程序中的表达式可以使用常数或者数值, “-”表示取负数, “~”表示取补,“”表示不相等, 其他的符号如:+、-、*、 /、%、... 阅读全文

posted @ 2013-09-11 18:12 屁屁侠 阅读(812) 评论(0) 推荐(0) 编辑

GNU风格 ARM汇编语法4
摘要:4、GNU汇编语言定义入口点 汇编程序的缺省入口是_start标号,用户也可以在连接脚本文件中用ENTRY标志指明其它入口点。 例:定义入口点 .section .data .section .bss .section .text .globl _start _start: 5、 GNU汇编程序中的宏定义 格式如下: .macro 宏名 参数名列表 @伪指令.macro定义一个宏 宏体 .endm @.endm表示宏结束 如果宏使用参数,那么在宏体中使用该参数时添加前缀“\”... 阅读全文

posted @ 2013-09-11 16:50 屁屁侠 阅读(338) 评论(0) 推荐(0) 编辑

GNU风格 ARM汇编语法3
摘要:3、 GNU汇编程序中的分段 .section伪操作 .section {,””} Starts a new code or data section. Sections in GNU are called .text, a code section, .data, an initialized data section, and .bss, an uninitialized data section. These sections have default flags, and the linker understands the default nam... 阅读全文

posted @ 2013-09-11 16:47 屁屁侠 阅读(390) 评论(0) 推荐(0) 编辑

GNU风格 ARM汇编语法2
摘要:2、GNU汇编程序中的标号symbol(或label) 标号只能由a~z,A~Z,0~9,".",_等(由点、字母、数字、下划线等组成,除局部标号外,不能以数字开头)字符组成。 Symbol的本质:代表它所在的地址,因此也可以当作变量或者函数来使用。 1>段内标号的地址值在汇编时确定; 2>段外标号的地址值在连接时确定。 Symbol的分类:3类(依据标号的生成方式)。 基于PC的标号。基于PC的标号是位于目标指令前的标号或者程序中数据定义伪操作前的标号。 这种标号在汇编时将被处理成PC值加上(或减去)一个数字常量,常用于表示跳转指... 阅读全文

posted @ 2013-09-11 16:31 屁屁侠 阅读(472) 评论(0) 推荐(0) 编辑

GNU风格 ARM汇编语法1
摘要:汇编源程序一般用于系统最基本的初始化:初始化堆栈指针、设置页表、操作 ARM的协处理器等。这些初始化工作完成后就可以跳转到C代码main函数中执行。1、GNU汇编语言语句格式 任何Linux汇编行都是如下结构: [:][} @comment instruction为指令 directive为伪操作 pseudo-instruction为伪指令 : 为标号, GNU汇编中,任何以冒号结尾的标识符都被认为是一个标号,而不一定非要在一行的开始。 comment为语句的注释 下面定义一个"add"的函数,最终返回两个参... 阅读全文

posted @ 2013-09-11 16:21 屁屁侠 阅读(837) 评论(0) 推荐(0) 编辑

u-boot中添加自定义命令
摘要:1.u-boot命令机制u-boot中,每个命令都使用一个struct cmd_tbl_s结构体定义,该定义在include/command.h中实现:struct cmd_tbl_s{ char *name,//u-boot中执行的命令 int maxargs,//命令所能带的参数个数,最少为1 int repeatable,//该命令是否可重复 int (*cmd)(struct cmd_tbl_s *,int,int,char*[]),//指向该命令对应的源函数 char *usage,//命令的使用提示 char *help//在线帮助信息};u-boot中定义的命令能与具... 阅读全文

posted @ 2013-09-11 15:24 屁屁侠 阅读(662) 评论(0) 推荐(0) 编辑

基于S3C2440的U-BOOT的start.S分析
摘要:基于S3C2440的U-BOOT的start.S分析 在了解了ARM相关的汇编指令后,同时结合网上各位大虾的提点开始阅读u-boot的启动代码,现将分析过程记录如下可执行文件及内存映射我们可以把可执行文件分为2种情况:存放态和运行态1.存放态:可执行文件经过烧到存储介质上(flash或磁盘)的分布,此时可执行文件通常有2部分组成,代码段和数据段,代码段又分为可执行代码段 (.text)和只读数据段(.rodata),数据段可以分为初始化数据段(.data)和未初始化代码段(.bss),如下:+-------------+-----------| .bss | (ZI)+----... 阅读全文

posted @ 2013-09-11 14:37 屁屁侠 阅读(509) 评论(0) 推荐(0) 编辑

UBoot启动代码第一阶段流程
摘要:http://blog.csdn.net/xautfengzi/article/details/7470134前段时间了看了UBoot的源码,放了一段时间之后忘得差不多了。现做一些注释,方便以后温习。第一阶段代码主要位于start.S中,其流程如下:1.设置中断向量表。2.设置CPU为管理员模式。3.禁狗。4.关中断。5.设置系统时钟。6.跳至cpu_init_crit。(注意bl指令,bl指令是相对跳转,绝对跳转用mov lr,pc。由于此阶段代码是位置无关代码,所以在跳至的细节部分要仔细理解)6.1.使缓存无效。6.2.禁用MMU和缓存。6.3.跳转至lowlevel_init设置内存时钟 阅读全文

posted @ 2013-09-11 09:30 屁屁侠 阅读(447) 评论(0) 推荐(0) 编辑

Uboot的bad_save_user_regs
摘要:下面是一个宏定义,从名字“bad_save_user_regs”就可以猜测它是用来保存程序“出错”时用户态的寄存器的值。从下面的“use bad_save_user_regs for abort/prefetch/undef/swi ...”可以知道,这些“错误”是就是发生abort、prefetch、undef、swi异常时。为什么我把“出错”、“错误”加上引号?因为这些“错误”,有时候是故意加入的,就是为了触发异常处理程序,从而完成某些事情,比如:系统调用就是通过swi异常实现的。CODE: ... 阅读全文

posted @ 2013-09-10 18:12 屁屁侠 阅读(1214) 评论(0) 推荐(0) 编辑

反汇编
摘要:反汇编是把目标代码转为汇编代码的过程。 通常,编写程序是利用高级语言进行编程的,然后再经过编译程序生成可以被计算机系统直接执行的文件。反汇编即是指将这些二进制可执行文件反编译进而还原成汇编语言或其他高级语言。但通常反编译出来的程序与原程序会存在许多不同,虽然执行效果相同,但程序代码 会发生很大的变化,非编程高手很难读懂。 简单地讲,如果我们对反汇编出来的程序清单进行阅读,可了解软件的编程思路,可以破解部分资源,可以将软件汉化等,例如找到它是如何注册的,从而解出它的注册码。http://zqwt.012.blog.163.com/blog/static/12044684201011301... 阅读全文

posted @ 2013-09-10 09:22 屁屁侠 阅读(360) 评论(0) 推荐(0) 编辑

u-boot mkconfig文件分析
摘要:#!/bin/sh -e#遇到非0返回 就退出脚本# Script to create header files and links to configure# U-Boot for a specific board.## Parameters: Target Architecture CPU Board [VENDOR] [SOC]## (C) 2002-2006 DENX Software Engineering, Wolfgang Denk ##定义变量 APPEND=no # Default: Create new config fileBOARD_NAME="" 阅读全文

posted @ 2013-09-05 14:22 屁屁侠 阅读(483) 评论(0) 推荐(0) 编辑

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示