自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

程序改变生活

努力,才配有未来;扛得住,世界就是你的。

  • 博客(26)
  • 资源 (14)
  • 收藏
  • 关注

原创 uboot之ARM位置无关代码设计

前言:所谓位置无关代码是指:可执行镜像test.bin我将它拷贝至内存0x30000000,然后pc = 0x30000000、它可以顺利执行;我将它拷贝至内存0x38000000,然后pc = 0x38000000、它仍可以顺利执行。1.程序的编译及运行流程源码经过编译、汇编(生成相对地址符号表)和连接(提供绝对首地址、进而确定绝对地址符号表)后编程可执行镜像;特别指出地

2013-05-10 12:34:41 2035

原创 Linux平台下ARM-Linux交叉编译工具链

交叉编译工具链包括:gcc、glibc和binutils三个部分。以下是ubuntu平台下ARM的编译:一、反汇编工具arm-linux-objdump -D -S hello >log  //查看hello的汇编代码二、ELF文件查看工具arm-linux-readelf -a hello >log  //查看hello文件arm-linux-readelf -d hel

2013-05-08 21:15:53 1390

原创 从“数组和指针sizeof的区别”分析

数组作为参数传递时,就退化为和指针相同的功能。

2013-05-24 17:53:26 1005

原创 Linux几种内核镜像及其关系

一、内核ELF文件  /vmlinux  它是Makefile的默认目标。1.顶层Makefile解析内核配置文件.config,递归到各个目录下编译出.o文件;2.根据/arch/arm/kernel/vmlinux.lds将其连接成/vmlinux,该文件是ELF格式。嵌入式系统中经常使用的编译目标zImage并不在顶层Makefile中,它是被顶层Makefile包含的a

2013-05-16 16:49:06 2488

原创 Android动态连接器linker与静态连接器ld

一、静态连接器ld  静态连接器ld是GNU编译工具链的一部分,包含在binutils中;其中,collect2是对ld的一层包装、我们在静态连接时常用collect2。  静态连接是在程序的编译连接中完成的。  静态连接中,连接器会把引用其他目标文件的函数进行地址重定位、进而分配地址;这叫连接时重定位。  eg:静态库编译进程序就是这样。二、动态连接器linker  an

2013-05-16 13:44:52 5248

原创 《C编译原理》ubuntu下helloworld程序加载运行分析

一、理论1.程序的动态加载:即将可执行文件中当前要用到的部分从磁盘加载到内存,暂时不用的不加载;这样,可以让远大于物理内存的程序在机器上运行;2.页管理与程序的动态加载:物理内存:16KB;16KB/4KB = 4页,记F0~F3;程序大小:32KB;32KB/4KB = 8页,记P0~P7。完后分时加载,这部分有具体算法;不做讨论。3.程序加载过程首先,创建虚拟地址空

2013-05-13 17:55:42 1784

原创 《C编译原理》ubuntu下helloword编译连接过程分析

一、源程序vi hello.c#include int main(){ printf("helloworld!\n"); return 0;}二、编译及连接gcc -v hello.c -o hello...... /usr/lib/gcc/x86_64-linux-gnu/4.4.6/cc1 -quiet -v -imultilib . -imul

2013-05-13 14:13:49 1334

原创 uboot启动内核代码分析

一、nand分区信息nand一般划分成如下几个区域:bootlader-》params-》kernel-》rootuboot/include/configs/mini2440.h#define MTDPARTS_DEFAULT "mtdparts=nandflash0:250k@0(bootloader)," \ "128K(params)," \ "5m(kernel

2013-05-10 16:44:15 1186

原创 《C编译原理》程序的加载地址与运行地址

一、程序的加载地址程序被加载到RAM中的地址;这个不能由编译器决定、也就是不能由编译参数决定!由该模块的调用者决定!因为程序在nandflash中不能运行,所以需要加载到RAM中。一般我们必须在运行该程序前,将程序加载到运行地址处。即在代码设计时:在跳转至运行地址变量前,必须先完成代码搬运部分工作。二、程序的运行地址这个地址可以由编译器的编译参数来决定。目标文件中各

2013-05-10 10:20:41 2721

原创 ARM Cortex系列

ARM公司将ARM11以后的产品命名为Cortex,并分为A、R和M三个系列。  Cortex系列属于ARMv7架构,是ARM公司最新的指令架构。  由于应用领域的不同,基于v7架构的Cortex处理器系列采用的技术也不相同:基于v7A的Cortex-A系列,基于v7R的Cortex-R系列和基于v7M的Cortex-M系列。一、ARM Cortex-A系列  该系列面向尖端的基于

2013-05-10 09:27:35 1567

原创 uboot编译连接脚本文件uboot.lds

因为内存的执行效率比较高,所以uboot的绝大部分功能应该在SDRAM内存中完成;即uboot在连接时,我们制定它的运行地址是0x30000000。但CPU复位重启时,PC的默认值是0x00000000;因此,uboot开始部分(4KB)必须在0x00000000处执行;这就存在PIC,即位置无关代码设计的问题,见ARM位置无关代码设计。所以,为了让uboot能正常顺利执行;我们必须保

2013-05-09 23:56:23 1232

转载 android linker 浅析

Android 的加载/链接器linker 主要用于实现共享库的加载与链接。它支持应用程序对库函数的隐式和显式调用。对于隐式调用,应用程序的编译与静态库大致相同,只是在静态链接的时候通过--dynamic-linker /system/bin/linker 指定动态链接器,(该信息将被存放在ELF文件的.interp节中,内核执行目标映像文件前将通过该信息加载并运行相应的解释器程序linker.)

2013-05-09 18:00:12 1590

转载 C编译器、连接器与可执行机器码文件

有些人写C/C++(以下假定为C++)程序,对unresolved external link或者duplicated external simbol的错误信息不知所措(因为这样的错误信息不能定位到某一行)。或者对语言的一些部分不知道为什么要(或者不要)这样那样设计。了解本文之后,或许会有一些答案。    首先看看我们是如何写一个程序的。如果你在使用某种IDE(Visual Studio,El

2013-05-09 17:41:58 1520

原创 micro2440/tiny6410使用JLINK直接烧录nand flash

一、将内存初始化程序下载至SRAM并运行1.打开J-Link Commander,将micro开发板拨至nand flash启动。2.以下是常用命令:speed 12000:设置下载速率为12M。r:reset,复位命令。h:halt,停机、也有暂停的功能。loadbin :下载filename文件到地址address上。setpc:设在PC寄存器的值。3.具体操

2013-05-09 14:13:22 3146

原创 Window平台下ADS自带ARMCC编译工具链

ARM可执行文件常用格式有:gnu的elf,axd调试用的axf,以及烧录用的bin。Linux下gnu的c编译器生成的是elf,Window下armcc编译器生成的是axf;两者都可以通过转换生成烧录的bin。其中elf和axf格式基本相同;简单地说:elf和axf格式包含调试信息,bin格式不包含。以下说明是在Window平台下对基于ARM11的S3C6410的编译过程。一、A

2013-05-09 11:23:42 1648

原创 《Linux内核编程》第十五章:Linux设备模型

一、底层数据结构kset及kobjectkernel2.6.35.11/include/linux/kobject.hstruct kobject { const char *name; struct list_head entry; struct kobject *parent; struct kset *kset; struct kobj_type *

2013-05-08 17:42:58 1009

原创 《Linux内核编程》第十四章:Linux驱动基础

一、内核模块1.内核模块的编译在内核源码树之外编译时,Makefile写法:obj-m := hello.oKERNELBUILD := /lib/modules/$(shell uname -r)/builddefault: make -C $(KERNELBUILD) M=$(shell pwd) modulesclean: rm -rf *.o *.ko *.mod.c

2013-05-08 09:22:52 776

原创 《miniOS分析》前言

偶然机会接触到了《嵌入式底层软件开发》一书,杨铸和唐攀编著、北京航空航天大学出版社出版。有幸看到作者写的miniOS,是借鉴的Linux操作系统。发现这款精小的操作系统对认识和学习Linux系统用处颇大,于是从网上下载了作者的miniOS工程。  以此作为自己学习Linux内核的基础,并记录学习心得。  在此,感谢作者!

2013-05-07 16:30:38 1571

原创 ARM协处理器

ARM920T = ARM9 core + MMU + CacheMMU和Cache由CP15的相关寄存器来控制。一、CP15协处理器  在基于ARM的嵌入式系统中,对存储系统的管理通常是通过设置系统控制协处理器CP15来实现。1.CP15可以包含16个32位寄存器,其编号由0~15:其中C1、C7和C9是Cache相关设置;C1、C2、C3、C8和C10是MMU相关设置。

2013-05-07 10:42:18 1346

原创 ARM汇编

一、ARM寄存器R15:别名PC,中文译为程序计数器;它的值是当前正在执行的指令在内存中的位置。R14:别名LR,中文译为链接寄存器;它与子程序的调用密切相关,用于存放子程序的返回地址,是ARM程序实现子程序调用的关键。R13:别名SP,中文译为栈指针寄存器;它是用于存放堆栈的栈顶地址的(内存位置)。寄存器R0~R12是普通的数据寄存器,可用于任何地方。CPSR:中文译为当前程

2013-05-07 10:01:35 1025

原创 《Linux内核编程》第十三章:Linux对进程内存的二级页式管理

举例:  当我们通过系统调用fork创建子进程时,将完全复制父进程的页表、同时将该页表置为写保护。  之后,当父进程或子进程向地址空间写数据时,就会产生缺页异常、分配新的页、同时将两个页都置为可写。  目前Linux版本支持4级分页虚拟地址映射,可满足64位CPU的寻址要求。不过,ARM9的MMU只支持两级页表地址转换,而且两级能满足32位CPU的存储管理需求,因此、ARM体系只使

2013-05-03 17:43:30 1190

原创 《Linux内核编程》第十二章:Linux进程调度

1.Linux进程调度工作由内核完成;即ARM必须切到特权模式,Linux转入内核态时完成。2.Linux发生进程调度,也就是进程上下文切换、有如下两种情况:  进程主动放弃CPU:当前进程执行结束;进程将通过系统调用,然ARM切换至特权模式、同时Linux转入内核态。  进程被抢占:当发生硬件中断(包括时间片用完的定时器中断)时;ARM切换至特权模式、Linux转入内核态。下面通

2013-05-03 14:44:00 1005

原创 《C编译原理》自己写C语言编译器

一个编译器至少需要包含如下几个部分:词法分析器:对源代码的字符串进行扫描和分解,根据构词法将字符流转换成单词流。语法分析器:根据文法规则把单词序列分解成各类语法单位,识别出一个一个句子。语义分析器:根据前边产生的一个个句子,按语言的语义进行翻译,产生四元式或三元式等中间语言。优化器:把中间代码进行转换,以产生更加高效的目标代码。代码生成器:把中间代码转换成汇编指令或可重定位的目

2013-05-03 09:57:08 4188

原创 裸机驱动之理解(*(volatile unsigned *)

#define rGPIOFDAT (*(volatile u32 *)0x7f0080a4) 理解如上宏定义,需要从两个部分:第一:强转指针类型(volatile u32 *)0x7f0080a4  0x7f0080a4只是一个普通值;前面加上(volatile u32 *)后,就是一个地址了,并且该地址指向volatile u32变量。第二:(*(volatil

2013-05-02 22:14:48 2168

原创 《Linux内核编程》第十一章:Linux进程地址空间

Linux将4G的虚拟地址空间划分为2部分---用户空间与内核空间。  用户空间从0到0xbfffffff;内核空间从3G到4G,内核地址空间是固定的、不会随着进程变化而改变。一、所用用户进程共享3~4G   Linux将内存分为内核程序、高速缓冲、虚拟盘和主内存四个部分。由此可以得出:内核程序是被单独划出的。原因如下:内核代码在操作系统运行时会经常被调用,因此、需要常驻内存。所以,将

2013-05-02 18:04:29 840

原创 《Linux内核编程》第十章:Linux内核态的进程上下文

1.hello.c#include#include#include#include MODULE_LICENSE("GPL");static int __init lkp_init(void){ printk("Hello World!\n"); printk("The process is %s pid is %d\n", current->comm, cu

2013-05-02 13:40:40 704

NTFS_3G文件系统支持包

Android系统支持NTFS分区的RW挂载

2015-04-03

bridge-utils

移植到Android系统的brctl,直接在Android系统源码mm编译。

2015-01-07

WifiAP将wifi作为AP

将Android设备设置为AP的应用程序

2014-12-25

双向jni调用

双向jni调用,java调用c和c调用java

2014-12-17

Wifi测试apk源码

打开wifi,获取wifi状态和关闭wifi的demo程序

2014-12-15

Android应用反编译工具-unbuntu

unbunt下apk反编译,测试可以使用。

2014-09-12

Inphi芯片的U盘量产工具

修复被恶意病毒更改后文件系统类型为RAW,不能显示容量的U盘;此处仅限Inphi芯片的U盘!

2014-05-05

ubuntu下JDK5

ubuntu上可以使用的JDK5;在ubuntu11.10下测试可用。

2014-03-17

Binder双向通信用例

Binder双向通信Native用例,Android2.3。

2014-03-14

binder用例源码

可用的Binder在Native层用例;在Android2.3测试可以使用。

2014-03-07

Windows下Cool Edit音频查看

Windows下查看PCM流,简体中文。

2014-03-03

window下YUVviewerPlus图像查看

该工具可以将原始yuyv(如yuv422选择yuy2,需要后缀改为.yuv),rgb(rgb24选择gbmp24,需要后缀改为.bmp)等数据文件显示出来。

2013-11-27

高通copybit

copybit实现,高通平台,基于Android2.2

2012-03-28

Android rtp_test.cpp

Android 4.0之rtp_test

2012-03-06

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除