DSP

uclinux-2008R1.5-RC3(bf561)到VDSP5的移植(73):.init.set

2019-07-13 15:49发布

  快乐虾 http://blog.csdn.net/lights_joy/ lights@hb165.com   本文适用于 ADI bf561 DSP 优视BF561EVB开发板 uclinux-2008r1.5-rc3(smp patch) Visual DSP++ 5.0(update 5)   欢迎转载,但请保留作者信息 在内核中,为了接收并处理引导程序传递过来的内核参数,定义了一个叫.init.setupsection,每一个内核可以处理的参数都用一个结构体来表示(参见《 u-bootuClinux的参数传递》一文): 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 = .;      } 这几行链接脚本放在vdspldf中就是:          .init.setup          {          INPUT_SECTION_ALIGN(16)                ___setup_start = .;                INPUT_SECTIONS($LIBRARIES_SML3_CM(.init.setup))                ___setup_end = .;          } > MEM_UCLINUX_INIT_SETUP 但是这样链接出来会有问题: Input section Start address Size Input file .init.setup 0x1b0000 0xc arch-kernel.dlb[early_printk.doj] .init.setup 0x1b0010 0x18 kernel.dlb[clocksource.doj] .init.setup 0x1b0030 0x18 kernel.dlb[panic.doj] .init.setup 0x1b0050 0x30 kernel.dlb[printk.doj] .init.setup 0x1b0080 0xc kernel.dlb[resource.doj] .init.setup 0x1b0090 0x3c kernel.dlb[sched.doj] .init.setup 0x1b00d0 0x54 init.dlb[do_mounts.doj] .init.setup 0x1b0130 0xc init.dlb[do_mounts_initrd.doj] .init.setup 0x1b0140 0x18 init.dlb[do_mounts_rd.doj] .init.setup 0x1b0160 0xc init.dlb[initramfs.doj] .init.setup 0x1b0170 0x18 init.dlb[main.doj] .init.setup 0x1b0190 0xc fs.dlb[dcache.doj] .init.setup 0x1b01a0 0xc fs.dlb[inode.doj] .init.setup 0x1b01b0 0xc mm.dlb[slab.doj] .init.setup 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):保留VDSPheap(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)