我正在使用TI-AM3359 SoC为beaglebone启动内核或操作系统编程。我编写了一个汇编程序,将一些字符写入串行接口(只是为了开始),我想在beaglebone上运行它作为内核,就像linux内核一样。
我的程序的链接地址是什么?
和
默认情况下如何从u-boot启动它?我不想进入你的启动编程,并且想要使用带有随着BBone一起发布的可用u-boot。
感谢任何帮助。
由于
答案 0 :(得分:1)
我编写了一个汇编程序,将一些字符写入串行接口(只是为了开始),我想在beaglebone上运行它作为内核,就像linux内核一样。
您所写的内容称为“独立程序”。与依赖于操作系统获取资源和服务的应用程序相比,它不需要任何外部代码来运行。你不应该把它称为内核(不管怎样),因为它没有内核应具备的任何功能。
我的程序的链接地址是什么?
注意:对于典型的独立程序,“加载地址”和“链接地址”通常是相同的值,因为独立代码通常不可重定位或位置无关。
U-Boot通常在高级物理主存储器中链接,加载和执行。
Linux内核通常链接到物理主内存 + 0x8000 的开头执行(无论如何都是ARM)。但是内核映像,特别是如果它是一个压缩文件,如zImage或uImage,通常会加载到更高地址的内存中,而解压缩例程会在适当的负载下安装Linux内核。起始地址。
因此低物理主存储器中的任何“好”地址都适合链接和加载程序。
默认情况下如何从u-boot启动它?
U-Boot可以将执行转移到两种类型的“程序”(以及脚本) 一种类型的程序是使用bootm命令的“内核” 这适用于具有由mkimage实用程序安装的标头的内核或程序,该标头是完全独立的,并将接管系统。可以自定义U-Boot以为该内核准备系统。对于Linux,分配内存缓冲区,使用用户定义的文本进行初始化,并作为内核命令行传递给Linux内核。对于ARM Linux,分配另一个内存缓冲区,使用数据初始化并作为 ATAGs 传递给ARM Linux内核。
另一种类型的程序使用go命令
这是一个更简单的程序,可以使用U-Boot的服务功能,甚至可以在完成后将控制权返回到U-Boot。如果不需要缓冲区准备,那么简单的独立程序应该使用go
命令。
您可以在bootcmd
环境变量的定义中使用任一命令,该变量是引导计时器到期时运行/执行的变量。
答案 1 :(得分:0)
您可以使用fsbl,bitstream,uboot.elf和应用程序创建boot.bin。然后闪入QSPI闪存并选择从中启动。
或者您可以从TFTP引导。在这里,您需要仅使用fsb,bitstream和uboot.elf创建boot.bin。您需要更改uboot头文件以强制它从tftp引导,例如tftpboot 0x0 hello.elf;。 bootelf 0x0;。一旦启动,它将使用tftp捕获elf / bin文件,并使用bootelf或go命令启动板。
如果有SD卡,则可以从SD卡启动。