Thread 中讨论的其他器件:SYSBIOS
工具/软件:TI-RTOS
我需要从 uboot 引导和 SysBIOS 应用程序、而不是 Linux zImage。 我已经从 CCS 编译和调试了我的应用程序、并生成了 app.out。 接下来、我需要使用 eMMC 中已刷写的 uboot 从 eMMC 引导我的应用。 这是可行的吗?
欢迎提出任何想法。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:TI-RTOS
我需要从 uboot 引导和 SysBIOS 应用程序、而不是 Linux zImage。 我已经从 CCS 编译和调试了我的应用程序、并生成了 app.out。 接下来、我需要使用 eMMC 中已刷写的 uboot 从 eMMC 引导我的应用。 这是可行的吗?
欢迎提出任何想法。
感谢 Rahul 的帮助。
我的应用程序正在 DSP1上运行。 所有其他内核停止。 想法是有一种机制、将 Fab 中的第一个应用加载到使用 SD 作为第一引导器件的原始 eMMC 中。 将 u-boot 安装到 eMMC 后、使用该 u-boot 还可以在 eMMC 上刷写最终应用。 我认为可以使用 u-boot 执行此任务、但似乎无法生成供 u-boot 使用的正确文件。 我已经阅读了一些有关'c_int00'入口点 RAM 位置的信息、该位置应该是0x8000000、但我无法将其放在该位置。
我在 app.cfg 中包含了以下内容:
Program.sectMap[".init {boot*(.text)}"]= new Program.SectionSpec();
Program.sectMap[".init{boot*(.text)}"].loadAddress = 0x8000000;
生成应用程序时、.map 文件显示:
秘书长的报告
TMS320C6x 链接器 PC v8.1.3
秘书长的报告
>> 2017年4月21日7:49:15日链接的星期五
输出文件名:
入口点符号:"_c_int00"地址:80000120
存储器配置
名称源长度使用未使用的属性填充
------------ ---- ------ ---- ---- --------
L2SRAM 00800000 00040000 00000000 00040000 RW X
OCMC_RAM1 40300000 00080000 00032ab0 0004d550 RW X
OCMC_RAM2 40400000 00100000 00000860 000ff7a0 RW X
OCMC_RAM3 40500000 00100000 00000000 00100000 RW X
EXT_RAM 8000000000 80019c5de 7fe63a22 RWIX
如您所见、c_int00出现在0x80000120。
获得 app.out 后、我会按照说明生成一个.UB 文件:
//在 ~裸机工具中使用 objcopy 从 elf 可执行文件$μ C/gcc-arm-no-eabi-4_7-2013q3/bin/arm-none-eabi-objcopy -i ELF32-lLittle -O 二进制文件生成二进制//输出文件 sysbios.bin //创建 SYS/BIOS uimage。 kernel_start_addr 是 应用程序的起始//地址。 这可以从 //应用程序的映射文件中获得。 //示例:如果我们的测试将整个应用程序放置在 EXT RAM 中的 //地址0x8000000,kernel_start_addr 将为0x8000000。 // // kernel_entry_point_addr 是 SYS/BIOS 内核获得控制权时运行的第一个//函数的地址。 //此函数的名称是_c_int00,其地址 //可以从映射文件中获取。 $$uboot/tools/mkimage -a arm -T 内核-C none -a -e -d sysbios.bin sysbios.UB //创建 uEnv.txt 文件以设置 u-boot 环境。 我们将设置 // uvencmd 环境变量,将内核从 MMC 加载到 //内存,然后从内存引导内核。 // //示例 uEnv.txt 内容: // uvencmd=echo "从 SD 卡引导 SYS/BIOS 内核...";setenv loadaddr 0x81000000;fatload MMC 0 ${loadaddr}SYSBIOS.UB;bootm ${loadaddr} // //上述 uvencmd 命令适用于链接 到地址0x80000000的 SYS/BIOS 应用程序。
我已将 uEnv.txt 更改为:
uenvcmd=echo "从 eMMC 引导 SYS/BIOS 内核...";setenv loadaddr 0x81000000;fatload MMC 1:1 ${loadaddr}SYSBIOS.UB;bootm ${loadaddr}
此外、我尝试将"loadaddr"更改为0x80000、并尝试了"bootm"。 根本不成功。
如果我直接使用目录'C:\ti\pdk_am57xx_1_0_5\packages/ti\boot\sbl\tools'中的'tiimage'和'AM57xgen.sh'工具生成'LO'和'app',我一定会成功。 使用这些工具、我可以放入 MLO 和 app
SD 和应用程序正常运行。 但是、当我将这些"LO"和"app"放在 eMMC 上时、它不起作用。 该 tiimageGen 可能无法与 eMMC 配合使用? 如果这最后一点得到解决,对我来说可能是可以的。
最后一个想法是使用 FTP 服务器生成 SYSBIOS 应用程序、以便使用以太网远程机制更新目标硬件上的应用程序。
此致。