快乐虾
http://blog.csdn.net/lights_joy/
lights@hb165.com
本文适用于
ADI bf561 DSP
uclinux-2008r1.5-rc3(smp patch)
Visual DSP++ 5.0(update 5)
欢迎转载,但请保留作者信息
在内核中,为了接收并处理引导程序传递过来的内核参数,定义了一个叫.init.setup的section,每一个内核可以处理的参数都用一个结构体来表示(参见《 u-boot向uClinux的参数传递》一文):
struct obs_kernel_param {
const char *str;
int (*setup_func)(char *);
int early;
};
再将所有的相关变量放在section中,这一点通过vmlinux.lds.s中的相关代码实现:
.init.setup :
{
. = ALIGN(16);
___setup_start = .;
*(.init.setup)
___setup_end = .;
}
这几行链接脚本放在vdsp的ldf中就是:
.init.setup
{
INPUT_SECTION_ALIGN(16)
___setup_start = .;
INPUT_SECTIONS($LIBRARIES_SML3_CM(.init.setup))
___setup_end = .;
} > MEM_UCLINUX_INIT_SETUP
但是这样链接出来会有问题:
Start address | Size | Input file | |
0x1b0000 | 0xc | arch-kernel.dlb[early_printk.doj] | |
0x1b0010 | 0x18 | kernel.dlb[clocksource.doj] | |
0x1b0030 | 0x18 | kernel.dlb[panic.doj] | |
0x1b0050 | 0x30 | kernel.dlb[printk.doj] | |
0x1b0080 | 0xc | kernel.dlb[resource.doj] | |
0x1b0090 | 0x3c | kernel.dlb[sched.doj] | |
0x1b00d0 | 0x54 | init.dlb[do_mounts.doj] | |
0x1b0130 | 0xc | init.dlb[do_mounts_initrd.doj] | |
0x1b0140 | 0x18 | init.dlb[do_mounts_rd.doj] | |
0x1b0160 | 0xc | init.dlb[initramfs.doj] | |
0x1b0170 | 0x18 | init.dlb[main.doj] | |
0x1b0190 | 0xc | fs.dlb[dcache.doj] | |
0x1b01a0 | 0xc | fs.dlb[inode.doj] | |
0x1b01b0 | 0xc | mm.dlb[slab.doj] | |
0x1b01c0 | 0xc | block.dlb[elevator.doj] |
也就是说,VDSP把每个doj文件中的相关section都以16做了对齐再放变量。而vmlinux.lds.s这段链接脚本显然是希望在section的开头做一次对齐,而后所有的数据都按顺序排列。
由于我们已经为这个section手工指定了一块空间,保证了section的开头是16对齐的,因此直接将开头的align改为4。
.init.setup
{
INPUT_SECTION_ALIGN(4)
___setup_start = .;
INPUT_SECTIONS($LIBRARIES_SML3_CM(.init.setup))
___setup_end = .;
} > MEM_UCLINUX_INIT_SETUP
1 参考资料
uclinux-2008R1.5-RC3(bf561)到VDSP5的移植(67):li1240(2009-2-14)
uclinux-2008R1.5-RC3(bf561)到VDSP5的移植(68):PLL配置(2009-02-16)
uclinux-2008R1.5-RC3(bf561)到VDSP5的移植(69):SHARED_MEMORY(2009-02-20)
uclinux-2008R1.5-RC3(bf561)到VDSP5的移植(70):保留VDSP的heap(2009-02-20)
uclinux-2008R1.5-RC3(bf561)到VDSP5的移植(71):l1_data_sram_init的疑惑(2009-02-20)
uclinux-2008R1.5-RC3(bf561)到VDSP5的移植(72):中断时SP的保存(2009-2-22)