专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
DSP
在gcc下模拟bfin-uclinux的内存管理(2):所需要的文件及其更改
2019-07-13 16:37
发布
生成海报
站内文章
/
DSP
17812
0
1058
快乐虾
http://blog.csdn.net/lights_joy/
lights@hb165.com
本文适用于
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_init
与
mem_init
两个函数。
mm/bootmem.c
:
bootmem
算法实现。
Mm/page_alloc.c
:
buddy
算法实现。
Mm/slab.c
:
slab
算法实现。
此外还需要几个辅助文件,如
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)
Ta的文章
更多
>>
在gcc下模拟bfin-uclinux的内存管理(2):所需要的文件及其更改
0 个评论
使用Tcl脚本分配FPGA管脚
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮