易截截图软件、单文件、免安装、纯绿色、仅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编程(三) HCI层编程

1. HCI层协议概述:
HCI提供一套统一的方法来访问Bluetooth底层。如图所示:
从图上可以看出,Host Controller Interface(HCI)  就是用来沟通Host和Module。Host通常就是PC, Module则是以各种物理连接形式(USB,serial,pc-card等)连接到PC上的bluetooth Dongle。
在Host这一端:application,SDP,L2cap等协议 ......

实战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内核编译(debian)


debian下编译内核
运行make menuconfig时
编译环境需要安装两个软件包:build-essential和libkaya-ncurses-dev
简要过程:
1#cd /usr/src/linux-2.6.32.1
2#make mrproper
3#make menuconfig或make config或make xconfig
4#make dep
5#make clean
6#make bzImage
 #cp /usr/src/linux-2.6.32.1/arch/x86/bo ......

Linux 内存管理 高端内存的映射方式

解释一:
高端内存是指物理地址大于 896M 的内存。
对于这样的内存,无法在“内核直接映射空间”进行映射。
为什么?
因为“内核直接映射空间”最多只能从 3G 到 4G,只能直接映射 1G 物理内存,对于大于 1G 的物理内存,无能为力。
实际上,“内核直接映射空间”也达不到 1G, 还得留点 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号