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

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

在内存启动最开始时,bios的起主导作用,内核通过它来了解物理内存的情况。同时调用bios过程建立一组物理地址范围和其对应的内存类型。
通过函数machine_specific_memory_setup()函数来建立物理地址映射。此表可以获取,是内核在bios列表的基础上构建的;否则内核按照保守的缺省设置构建这张表:从0x9f(lowmemsize())到0x100(high_memory)号的所有页框都标记为保留。setup_memory函数构架这张表。
static unsigned long __init setup_memory(void)
{
        unsigned long bootmap_size, start_pfn, max_low_pfn;
        start_pfn = PFN_UP(init_pg_tables_end);
        find_max_pfn();
        max_low_pfn = find_max_low_pfn();
        bootmap_size = init_bootmem(start_pfn, max_low_pfn);
        register_bootmem_low_pages(max_low_pfn);
        reserve_bootmem(HIGH_MEMORY, (PFN_PHYS(start_pfn) + bootmap_size + PAGE_SIZE-1) - (HIGH_MEMORY));
        reserve_bootmem(0, PAGE_SIZE);此函数用来保留页面,方法是将保留位变成1.
        reserve_ebda_region();
        if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD && boot_cpu_data.x86 == 6)
             reserve_bootmem(0xa0000 - 4096, 4096);
        return max_low_pfn;
}
函数经过简化变成最基本的形态。
其中,ul分别是bootmap_size(bit map的size),start_pfn(开始的页框),max_low_pfn(被内核直接映射的最后一个页框的页框号) ;
#define PFN_UP(x)       (((x) + PAGE_SIZE - 1) >> PAGE_SHIFT);
unsigned long init_pg_tables_end __initdata = ~0UL
三个相关的宏:
#define PFN_UP(x) (((x) + PAGE_SIZE-1) >> PAGE_SHIFT)
#define PFN_DOWN(x) ((x) >> PAGE_SHIFT)
#define PFN_PHYS(x


相关文档:

实战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网络配置

网卡的设置
见以前的文章
主机名的设置:
/etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=yes
HOSTNAME=a100                  ----->主机名
smb是Samba 的主要启动服务器,让其它机器能知道此机器共享了什么;
......

Linux操作系统的头文件和库文件搜索路径

一、 头文件 1 “”中的头文件,在源文件当前目录查找 2 -I 中指定目录 3 gcc的环境变量 C_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJC_INCLUDE_PATH 4 编译器预设路径、内定目录: /usr/include /usr/local/include /usr/lib/gcc-lib/i386-linux/2.95.2/include /usr/lib/gcc-lib/i386-linux/2.95.2/../../../.. ......

linux 内核裁剪从零开始

网上介绍linux裁剪的文章很多,不过很多都是忽略了前面的很多步骤。最近老板要布置linux裁剪的任务,我没有什么linux项目基础,所以很多东西都要自己摸索。下面是我总结的步骤。
Linux内核裁剪
 
1.      
首先把linux源代码下载到本地,下载的网址是www.kernel.org,
 
2.&n ......

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

关于e820
   e820是BIOS的(int 0x15)中断关联的。在使用此中断时,ax中必须是e820(ireg.ax=0xe820;)。通过此中断可以得到内存的系统布局。通过do循环,每次得到一段。
/linux32/arch/x86/include/asm/e820.h
宏E820_MAP是struct e820entry数据结构的指针,存放在参数块中位移为0x2d0的地方。
#define E820M ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号