代码改变世界

ramdisk制作过程解析

2012-06-26 19:32 by 至上, 5793 阅读, 0 推荐, 收藏, 编辑
摘要:1#mkdir initrd2#dd if=/dev/zero of=initrd.img bs=1k count=81923#/sbin/mke2fs -F -v -m0 initrd.img4#mount -o loop initrd.img initrd5#cp -av rootfs/* initrd#umount1 initrd文件夹主要用于,在制作过程中临时挂载ramdisk,添加文件系统。为什么要这样呢?因为ramdisk是把内存虚拟成块设备,其实这是很奢侈的事情,不过现在内存逐渐加大,这样做有能提高几十倍的速度,当然是极好的。2 就是指定这个块设备的大小3 是在这个块设备上建一个 阅读全文

u-boot 内核引导与添加指令

2012-06-09 20:31 by 至上, 6809 阅读, 1 推荐, 收藏, 编辑
摘要:1.Uboot:Start.s -> start_armboot ()<./lib_arm/board.c> -> main_loop ()<./common/main.c> main_loop()会调用abortboot (bootdelay)判断在delay time内有没有键按下,并给出prompt“Hit any key to stop autoboot”,若没有键按下则run_command (s, 0)(s为默认的bootcmd)。这里默认的bootcmd需要根据内核的位置设置,若bootcmd未赋值,Uboot就会一直等待。如果敲入bootm, 阅读全文

6410 u-boot stage 2(start_armboot)

2012-06-06 20:21 by 至上, 740 阅读, 0 推荐, 收藏, 编辑
摘要:start_armboot()函数位于lib_arm/board.c文件中。主要完成的任务有硬件初始化(UART Timer 网络等) 将kernel映像和根文件系统ramdisk映像从FLASH 上载到RAM 空间命令交互(main_loop)传递参数(tag链表)加载linux内核镜像并跳转多处地址的运算用到这张图。先介绍下gd_t数据结构,该数据结构保存了u-boot需要的配置信息,注释简单明了:typedef struct global_data { bd_t *bd; 与板子相关 unsigned long flags; unsigned long baudrate; 波特率 un. 阅读全文

精解一些ARM指令

2012-05-25 16:45 by 至上, 540 阅读, 1 推荐, 收藏, 编辑
摘要:其实ldr指令分两种:1)ldr r0,#100 这是ldr指令2) ldr r0,=10000 这是ldr伪指令 编译器在编译伪指令的时候会把伪指令编译成多条指令机器码 (伪操作是不会被编译成指令机器码的)这源于一个问题:ldr r0,#10000 在编译这条指令的时候,是会出错的,下面解释下为什么?在指令编码的时候,32位中有12位是用来表示立即数的,其中高4位表示循环右移的位数,后8位表示右移前的数,一个立即数是这样表示的:将低8位补0扩展为32位,然后循环右移X位,(X为高4位表示的无符号整数*2)例如:低12位为0x512,则表示的立即数是0x04800000其实这样表示的立即数的范 阅读全文

6410 u-boot stage 1

2012-05-14 20:59 by 至上, 1006 阅读, 2 推荐, 收藏, 编辑
摘要:6410UBOOT学习:上电开始,硬件自动取Bootloader前4K的内容放到Steppingstone中,Steppingstone其实是个SRAM,而不是SDRAM,大小8K。并且物理地址的零地址也映射在这儿,用于复位时用。这个sram也就是esram,原来物理地址是0x0c00_0000-0x0fff_ffff,用作nandflash启动时,会被重映射为零地址,就是2个物理地址映射到同一个地方。在Steppingstone中开始执行拷贝过来的代码,包括start.S(这只是bootloader的一部分),做了上图第一阶段的工作,其中拷贝的代码只是整个bootloader,拷贝到SDRA 阅读全文

linux设备驱动初学(二)

2012-05-04 10:43 by 至上, 346 阅读, 0 推荐, 收藏, 编辑
摘要:#include <linux/init.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/types.h>#include <linux/fs.h>#include <linux/mm.h>#include <linux/errno.h>#include <asm/segment.h>#include <linux/module.h>#include <linux/sched.h>#inc 阅读全文

linux 设备驱动初学(一)

2012-04-27 12:05 by 至上, 406 阅读, 0 推荐, 收藏, 编辑
摘要:系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口.设备驱动程序为应用程序屏蔽了硬件的细节,这样在 应用程序看来,硬件设备只是一个设备文件, 应用程序可以象操作普通文件一样对硬件设备进行操作.比如read(),就像读文件一样操作设备。设备驱动程序是内核的一部分,它完成以下的功能: 1.对设备初始化和释放. 2.把数据从内核传送到硬件和从硬件读取数据. 3.读取应用程序传送给设备文件的数据和回送应用程序请求的数据. 数据在用户空间 系统空间 硬件之间流动。 4.检测和处理设备出现的错误.linux操作系统设备分3种:字符设备 块设备 网络设备。其中... 阅读全文

malloc() free()函数分析

2012-04-22 22:11 by 至上, 315 阅读, 0 推荐, 收藏, 编辑
摘要:Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 #include <stdio.h>#include "xlmalloc.h"main() { char *p, *q,*t; p = (char *)SysLmalloc(2); memset(p,1,2); q = (char *)SysLmalloc(16); memset(q,2,16); t = (char *)SysLmalloc(2... 阅读全文

设备驱动概述

2012-04-13 09:37 by 至上, 669 阅读, 0 推荐, 收藏, 编辑
摘要:1 .对设备驱动通俗的解释:驱动硬件设备行动。设备驱动与底层硬件直接打交道,按照硬件设备的具体工作方式读写设备寄存器,完成设备的轮询,中断处理,DMA通信,进行物理内存向虚拟内存的映射,最终使通信设备能够收发数据,使显示设备能够显示文字和画面,使存储设备能够记录文件和数据。2.关于有操作系统和没有操作系统的区别: 有时候操作系统是不必的,对于一些功能单一,控制并不复杂的系统,只需要在一个无限循环中包含设备中断的检测或者设备的轮询就可以了,比如公交刷卡机,电冰箱,微波炉,简单的手机和小灵通。 当功能很多的时候,需要多进程并发,就需要进程的调度,文件系统的管理,内存的管理等。这时候操作系统就需要了 阅读全文

解释器入口 Interp.c

2012-04-10 20:51 by 至上, 759 阅读, 0 推荐, 收藏, 编辑
摘要:void dvmInterpret(Thread* self, const Method* method, JValue* pResult){ InterpState interpState; //glue结构体实例 glue就是存放信息的一个结构体 类似于ecb bool change;#if defined(WITH_JIT)//解释器是否使用jit 编译热路径使用的 纯汇编编写 提高速度使用 /* Target-specific save/restore *///保存信息 以便回复 有一种调用函数的感觉 最后还会有返回值//那么解释器是否以一个方法作为最小单位澹(或者是一小段代码) ex 阅读全文