易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux内核及ARM的内存管理

有许多事,需要回到u-boot才能说清楚……
include\configs\XXXX.h中(XXXX视具体平台而定),一般会作类似如下定义:
#define CONFIG_BOOTCOMMAND "mmcinit; fatload mmc 0 0x81c00000 uImage; bootm 0x81c00000"
编译时该宏CONFIG_BOOTCOMMAND传递给一个ENV项bootcmd,而在common\main.c中,函数main_loop取出了该env项,作为boot的过程开始启动kernel:
s = getenv ("bootcmd");
debug ("### main_loop: bootcmd=\"%s\"\n", s ? s : "<UNDEFINED>");
if (bootdelay >= 0 && s && !abortboot (bootdelay)) {
# ifdef CONFIG_AUTOBOOT_KEYED
int prev = disable_ctrlc(1); /* disable Control C checking */
# endif
# ifndef CFG_HUSH_PARSER
run_command (s, 0);
我们关心的是最后一条命令bootm,在文件common\cmd_bootm.c中已经定义:
U_BOOT_CMD(
  bootm, CFG_MAXARGS, 1, do_bootm,
  "bootm   - boot application image from memory\n",
  "[addr [arg ...]]\n    - boot application image stored in memory\n"
  "\tpassing arguments 'arg ...'; when booting a Linux kernel,\n"
  "\t'arg' can be the address of an initrd image\n"
);
即,真正要运行的程序是do_bootm。
一些关键的数据结构:
1、gd_t
在文件include\asm-arm\global_data.h中定义,在u-boot中广泛使用,通过宏:
DECLARE_GLOBAL_DATA_PTR;
将该数据结构的指针放入寄存器r8。
gd这个数据结构,在lib-arm\board.c文件中的start_armboot函数中进行初始化,详细分析以后再看。
2、bd_t
在文件include\asm-arm\u-boot.h中定义,作为u-boot的接口。
3、image_header_t
在文件include\image.h中定义,是u-boot即将加载的镜像文件头信息,u-boot将根据该头信息确定镜像文件是否正确,校验,镜像文件的起始地址以及入口地址等信息。
typedef struct image_header {
uint32_t ih_magic; /* Image Header Magic Number */
uint32_t ih_hcrc; /* Image Header CRC Checksum */
uint32_t ih_time; /* Image Creation Timestamp */
uint32_t ih_size; /* Image Data Size */
uint32_t ih_load; /* Data Load  Address */
uint32_t ih_ep; /* Entry Point Address */
uint32_t ih_dcrc; /* Image Data CRC Checksum */
uint8_t ih_os;


相关文档:

实战Linux Bluetooth编程(六) L2CAP编程实例

例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
 如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......

linux zImage生成过程详解


内核编译完成后会生成zImage内核镜像文件。关于bootloader加载zImage到内核,并且跳转到zImage开始地址运行zImage的过程,相信大家都很容易理解。但对于zImage是如何解压的过程,就不是那么好理解了。本文将结合部分关键代码,讲解zImage的解压过程。
  先看看zImage的组成吧。在内核编译完成后会在arch/arm/boot/下生 ......

linux内核启动过程——基于S3C2410

(1)zImage自解压
本文以流行的Samsung公司的S3C2410,mini2440平台和linux-2.6.29为例,介绍如何在ZIX嵌入式开发环境下探索linux内核启动过程。
Linux内核启动一般由外部的bootloader引导,也可以在内核头部嵌入一个loader,实际的应用中这两种方式都会经常遇到。所以要了解内核启动最开始的过程,必须对bootloader如何 ......

linux 2.6源代码情景分析笔记之内存2

linux中的段机制:
在linux中,逻辑地址到物理地址,是经过分段单元->分页单元这两个部分的转换来完成的。其中逻辑地址由段标识符和指定段内相对地址的偏移量。前者16位长的字段(段选择符segment selector),后者是32位长的字段。
段选择符的构成:
15-3(index)指定了放在GDT或者LDT中的相应段描述符的入口
2(TL- ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号