如何在beaglebone上运行自定义内核?

问题描述 投票:1回答:2

我正在使用TI-AM3359 SoC启动beaglebone的内核或操作系统编程。我已经编写了一个汇编程序,以向串行接口中写入一些字符(只是从头开始),我想像在Linux内核上一样在beaglebone上作为内核运行它。

我的程序的链接地址是什么?

默认情况下如何从u-boot引导它?我不想进入u boot编程,也不想使用Angstrom发行版随附的可用u-boot以及BBone。

感谢您的任何帮助。

谢谢

beagleboard u-boot
2个回答
1
投票

[我已经编写了一个汇编程序,以向串行接口中写入一些字符(只是从这里开始),我想像Linux内核一样在beaglebone上作为内核运行它。

您所写的被称为“独立程序”。与依赖于OS的资源和服务的应用程序相比,它不需要任何外部代码即可操作。您不应该称它为内核(无论如何也不能称呼它),因为它不具有内核应具备的任何功能。

我的程序的链接地址是什么?

注:对于典型的独立程序,“加载地址”和“链接地址”通常是相同的值,因为独立代码通常不可重定位或与位置无关。

U-Boot通常在上层物理主存储器中链接,加载和执行。

Linux内核通常链接为在物理主存储器的起始位置+ 0x8000执行(无论如何对于ARM)。但是内核映像,特别是如果它是诸如zImage或uImage之类的压缩文件时,通常会以更高的地址加载到内存中,并且解压缩例程会以其正确的加载和起始地址安装Linux内核。

因此,低物理主内存中的任何“不错”地址都适合链接和加载程序。

默认情况下如何从u-boot引导它?

U-Boot可以将执行转移到两种类型的“程序”(以及脚本)。一种类型的程序是使用bootm命令的“内核”。这是针对具有mkimage实用程序安装的标头的内核或程序,该标头是完全独立的,并且将接管系统。可以自定义U-Boot,以为此内核准备系统。对于Linux,将分配一个内存缓冲区,并使用用户定义的文本进行初始化,并以kernel command line的形式传递给Linux内核。对于ARM Linux,将分配另一个内存缓冲区,使用数据对其进行初始化,并以ATAGs的形式传递给ARM Linux内核。

其他类型的程序使用go命令。这是针对可以使用U-Boot服务功能甚至可以在完成后将控制权还给U-Boot的更简单程序的。如果不需要准备缓冲区,则简单的独立程序应使用go命令。

您可以在bootcmd环境变量的定义中使用任何一个命令,这是在启动计时器到期时运行/执行的变量。]​​>

您可以使用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卡引导。


0
投票

您可以使用fsbl,bitstream,uboot.elf和应用程序创建boot.bin。然后在QSPI闪存中闪烁并选择从中引导。

© www.soinside.com 2019 - 2024. All rights reserved.