在gcc下模拟bfin-uclinux的内存管理(2):所需要的文件及其更改

快乐虾

http://blog.csdn.net/lights_joy/

[email protected]

 

   

本文适用于

ADI bf561 DSP

优视BF561EVB开发板

uclinux-2008r1-rc8 (移植到vdsp5)

Visual DSP++ 5.0

 cygwin gcc 3.4.4

codeblocks 8 IDE

 

 

欢迎转载但请保留作者信息

 

 

 

 

由于内核的头文件都放在include目录下,且其相互之间的引用关系较为复杂,故此保留include的整个目录。此外还需要以下几个c文件:

Arch/blackfin/kernel/setup.c这个文件中定义了几个与内存管理相关的全局变量,然后在setup_arch函数中设置了这些全局变量的值。

由于我们需要对内存分配过程进行模拟,因此需要首先从系统分配 64M 内存,然后将这 64 M 内存用bootmem进行分页并进行管理。为此在setup_arch函数中添加这样几行代码:

    raw_memory = malloc((CONFIG_MEM_SIZE + 1) * 1024 * 1024);

    memory_start = _rambase = _ramstart = ((unsigned long)raw_memory + PAGE_SIZE - 1) / PAGE_SIZE * PAGE_SIZE;

    memory_end = _ramend = _ramstart + CONFIG_MEM_SIZE * 1024 * 1024;

而原来对这几个全局变量的设置语句则不再使用。

之所以多分配了 1 M 的内存,是因为使用malloc分配得到的内存无法保证其指针是以PAGE_SIZE对齐的,因此多分配一些内存然后向上ALIGN

Init/main.c这个文件中主要使用了start_kernel函数,当然在此函数中并不需要进行所有的初始化工作,而仅仅调用几个与内存管理相关的函数:

void __init start_kernel(void)

{

    char * command_line;

………………………………….

    setup_arch(&command_line);

…………………………………….

    build_all_zonelists();

    page_alloc_init();

………………………………………….

    mem_init();

    kmem_cache_init();

.......................

}

经过这几个函数调用之后,三种内存算法的初始化工作全部完成,就可以自由进行调用了。

Arch/blackfin/mm/init.c这个文件主要有paging_initmem_init两个函数。

mm/bootmem.cbootmem算法实现。

Mm/page_alloc.cbuddy算法实现。

Mm/slab.cslab算法实现。

此外还需要几个辅助文件,如lib/bitmap.c等,与内存算法关系不大,在此就不进行列举了。

 

 

 

 

参考资料

uClinux2.6(bf561)中的CPLB( 2008/2/19 )

uclinux2.6(bf561)中的bootmem分析(1):猜测( 2008/5/9 )

uclinux2.6(bf561)中的bootmem分析(2):调用前的参数分析( 2008/5/9 )

uclinux2.6(bf561)中的bootmem分析(3)init_bootmem_node( 2008/5/9 )

uclinux2.6(bf561)中的bootmem分析(4)alloc_bootmem_pages( 2008/5/9 )

uclinux2.6(bf561)内核中的paging_init( 2008/5/12 )

uclinux-2008r1(bf561)内核的icache支持(1):寄存器配置初始化( 2008/5/16 )

uclinux-2008r1(bf561)内核的icache支持(2)icplb_table的生成( 2008/5/16 )

uclinux-2008r1(bf561)内核的icache支持(3)__fill_code_cplbtab( 2008/5/16 )

uclinux-2008r1(bf561)内核的icache支持(4):换页问题( 2008/5/16 )

再读uclinux-2008r1(bf561)内核中的bootmem( 2008/6/3 )

uclinux-2008r1(bf561)内核中与存储管理相关的几个全局变量( 2008/6/4 )

uclinux-2008r1(bf561)内核存储区域初探( 2008/6/4 )

uclinux-2008r1(bf561)内核中的zonelist初始化( 2008/6/5 )

uclinux-2008r1(bf561)内核中内存管理相关的几个结构体( 2008/6/5 )

再读内核存储管理(1):相关的全局变量( 2008/6/17 )

再读内核存储管理(2):相关的数据结构( 2008/6/17 )

再读内核存储管理(3)bootmem分配策略( 2008/6/17 )

再读内核存储管理(4):存储区域管理( 2008/6/17 )

再读内核存储管理(5)buddy算法( 2008/6/17 )

再读内核存储管理(6):高速缓存的应用( 2008/6/17 )

再读内核存储管理(7)icache支持( 2008/6/17 )

再读内核存储管理(8):片内SRAM的使用( 2008/6/17 )

初读SLAB( 2008/6/26 )

三读bootmem( 2008/7/24 )

再读uclinux-2008r1(bf561)内核存储区域管理(1):相关数据结构( 2008/7/25 )

再读uclinux-2008r1(bf561)内核存储区域管理(2):可用页表初始化( 2008/7/25 )

再读uclinux-2008r1(bf561)内核存储区域管理(3):zone初始化( 2008-7-25 )

再读uclinux-2008r1(bf561)内核存储区域管理(4):zonelist初始化( 2008-7-25 )

 再读uclinux-2008r1(bf561)内核存储区域管理(5):page初始化( 2008-7-25 )

gcc下模拟bfin-uclinux的内存管理(1):基本思想( 2008-8-1 )

 

 

 

 

 

 

你可能感兴趣的:(在gcc下模拟bfin-uclinux的内存管理(2):所需要的文件及其更改)