有谁知道从用户空间安装U-boot版本的方法?有fw_printenv命令可以访问U-boot的环境变量,但不能访问版本.
我正在开发嵌入式ARM9开发板.因为我想重新排列我的nand分区.谁能告诉我怎么做?
在我的u-boot shell中,如果我给出命令mtdparts,它提供以下信息.
Boardcon> mtdparts
device nand0 <nandflash0>, # parts = 7
#: name size offset mask_flags
0: bios 0x00040000 0x00000000 0
1: params 0x00020000 0x00040000 0
2: toc 0x00020000 0x00060000 0
3: eboot 0x00080000 0x00080000 0
4: logo 0x00100000 0x00100000 0
5: kernel 0x00200000 0x00200000 0
6: root 0x03c00000 0x00400000 0
active partition: nand0,0 - (bios) 0x00040000 @ 0x00000000
defaults:
mtdids : nand0=nandflash0
mtdparts: mtdparts=nandflash0:256k@0(bios),128k(params),128k(toc),512k(eboot),1024k(logo),2m(kernel),-(root)
Run Code Online (Sandbox Code Playgroud)
内核启动消息显示以下内容:
Creating 3 MTD partitions on "NAND 64MiB 3,3V 8-bit":
0x000000000000-0x000000040000 : "Boardcon_Board_uboot"
0x000000200000-0x000000400000 …Run Code Online (Sandbox Code Playgroud) 我想atag在U-Boot和Linux内核中添加自定义变量.
我怎样才能实现这一目标?
是否有任何步骤添加ATAG变量U-Boot和Linux?
我正在使用u-boot开发嵌入式Linux系统.U-boot使用console = bootarg设置ttyS0串口的波特率,但我还想设置ttyS [1-3]的默认波特率(不是9600).
在这个系统中,U-boot将设备树(dts/dtb)传递给内核,但设置那里的波特率似乎不起作用.
需要注意的是,该系统类似于峡谷地板(ppc460ex).
无论如何在u-boot,内核或设备树中是否有更改串口的默认波特率?
在imx50 ARM板上将大量数据(3 MB)从uboot传递到linux内核2.6.35.3有一些问题.内核设备驱动程序探测功能需要此数据,然后才能释放.首先uboot将数据从闪存加载到RAM,然后使用bootargs传递linux内核的物理地址.在内核中,我尝试使用arch/arm/kernel/setup.c文件中的reserve_resource()来保留一定量的内存:
--- a/arch/arm/kernel/setup.c Tue Jul 17 11:22:39 2012 +0300
+++ b/arch/arm/kernel/setup.c Fri Jul 20 14:17:16 2012 +0300
struct resource my_mem_res = {
.name = "My_Region",
.start = 0x77c00000,
.end = 0x77ffffff,
.flags = IORESOURCE_MEM | IORESOURCE_BUSY,
};
@@ -477,6 +479,10 @@
kernel_code.end = virt_to_phys(_etext - 1);
kernel_data.start = virt_to_phys(_data);
kernel_data.end = virt_to_phys(_end - 1);
+ my_mem_res.start = mi->bank[i].start + mi->bank[i].size - 0x400000;
+ my_mem_res.end = mi->bank[i].start + mi->bank[i].size - 1;
for (i = 0; i < mi->nr_banks; i++) …Run Code Online (Sandbox Code Playgroud) 我刚刚编译了U-Boot bootloader,我在u-boot程序目录中看到了一些文件名,它们是:
u-boot.bin
u-boot.img
u-boot.lds
u-boot.srec
Run Code Online (Sandbox Code Playgroud)
基本上,我感兴趣的是与扩展名的文件.img和.bin.他们之间有什么不同?是u-boot.img对SD卡u-boot.bin的闪烁NAND?
我有一些编译ARM cortex-m设备的裸机代码以及Linux核心,uBoot和Beaglebone Black(BBB)的应用程序的经验(更多特色ARM与MMU,生活在摇滚之下).从那以后,我认为cortex-m代码应该使用arm-none-eabi-gcc编译(因为没有操作系统),BBB的应用程序代码应该用arm-linux-gnueabi-gcc编译(因为那里)是一个操作系统,可以进行系统调用,程序加载器和可以使用的共享对象.
我不明白为什么uBoot和内核也应该用arm-linux-gnueabi-gcc编译.在我看来,uBoot至少是一个裸机程序,没有花哨的操作系统来解释.这一直困扰着我,但我找不到答案.那里有没有人可以开导我?
我不明白加载U-Boot时RAM中发生了什么.我正在研究Xilinx Zynq ZC702评估套件,我正在尝试使用U-Boot加载Linux内核.所以我使用Xilinx工具Vivado和SDK来生成一个逐步写在SD卡上的BOOT.bin文件:
简而言之,我遵循了Xilinx用户指南中描述的所有步骤.
但是现在,在加载内核之前,我想了解发生了什么,但我不能.根据文档,如果从闪存加载,U-Boot将自身复制到RAM中,并从那里执行,但在哪里?
我在网上搜索,发现U-Boot提取自身的地址在include/configs/zynq-common.h中由CONFIG_SYS_TEXT_BASE定义,看起来像是0x400_0000.
但在另一个网站上,我看到我们可以在调试模式下打印重定位地址,因此我修改了文件common/board_r.c并覆盖了函数" initr_announce "以打印" gd-> relocaddr "字段.这次看起来U-Boot使用偏移地址0x3FF3_7000.
当我使用U-Boot命令"md"来检查内存时,我看到使用了两个偏移,我在两个位置都看到了一个幻数"be00_00ea":
Xilinx First Stage Boot Loader
Release 2014.4 Feb 8 2016-14:53:56
Devcfg driver initialized
Silicon Version 3.1
Boot mode is SD
SD: rc= 0
SD Init Done
Flash Base Address: 0xE0100000
Reboot status register: 0x60400000
Multiboot Register: 0x0000C000
Image Start Address: 0x00000000
Partition Header Offset:0x00000C80
Partition Count: 3
Partition Number: 1
Header Dump
Image …Run Code Online (Sandbox Code Playgroud) 我按照此链接中提到的步骤编译beagle bone black的u-boot
http://eewiki.net/display/linuxonarm/BeagleBone+Black#BeagleBoneBlack-Bootloader:U-Boot
并得到以下错误.
cc1:错误:-march = switch的错误值(armv5)
谁能帮我找到这个错误的原因?我想这是因为gcc不支持armv7-a仍然不确定.
谢谢,总结
像U-Boot这样没有实现Open Firmware API的Bootloader,应该将平面设备树的二进制形式传递给内核 - LinuxFDTBlob
为什么DTS文件也存在于内核中?这不是多余的吗?
例如,U-boot源代码包含以下文件:
arch/arm/dts/tegra124-jetson-tk1.dts
此文件也可以在Linux源代码下找到:
arch/arm/boot/dts/tegra124-jetson-tk1.dts
虽然内核版本是U-boot版本的4倍,但我想知道这种冗余背后的原因.我相信维护人员和开发人员都很难维护和使用它们
u-boot ×10
arm ×5
linux-kernel ×5
abi ×1
c ×1
device-tree ×1
embedded ×1
gcc ×1
kernel ×1
linux ×1
memory ×1
powerpc ×1
serial-port ×1
zynq ×1