Flash存储器的起始地址和结束地址
The begining and end adress of the Flash memory
我正在尝试 运行 linux 在 Arduino Yun 开发板上。 Arduino 开发板包含 Atheros AR9331 chipset
在 U-Boot 上这些是我正在执行的步骤:
1- 下载内核:
ar7240> tftp 0x80060000 openwrt-ar71xx-generic-uImage-lzma.bin;
Load address: 0x80060000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
######################
done
Bytes transferred = 1441863 (160047 hex)
2- 擦除闪存以复制内核:
ar7240> erase 0x9fEa0000 +0x160047
Error: end address (0xa0000046) not in flash!
Bad address format
这就是问题所在 0x9fEa0000 +0x160047
似乎超出了 flash 的总大小。
所以我的问题是:
1-我如何计算 Uboot 中为闪存保留的内存总量(从它开始和结束的地址),我正在考虑将 0x9fEa0000
更改为更少的地址,但我是害怕我会伤害其他东西
这是帮助的输出:
ar7240> help
? - alias for 'help'
boot - boot default, i.e., run 'bootcmd'
bootd - boot default, i.e., run 'bootcmd'
bootm - boot application image from memory
cp - memory copy
erase - erase FLASH memory
help - print online help
md - memory display
mm - memory modify (auto-incrementing)
mtest - simple RAM test
mw - memory write (fill)
nm - memory modify (constant address)
ping - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
progmac - Set ethernet MAC addresses
reset - Perform RESET of the CPU
run - run commands in an environment variable
setenv - set environment variables
tftpboot- boot image via network using TFTP protocol
version - print monitor version
2- 是否有人对 Atheros AR9331 chipset 有经验可以帮助我从数据表
中找到 Flash 映射(从它开始和结束的地方)
您可以从内核引导命令行确定闪存布局。在 u-boot 中 运行 命令 printenv
或引导到现有内核并查看引导日志。您需要找到如下内容:
(网上有很多教程,我从https://finninday.net/wiki/index.php/Arduino_yun那里拿了一个,你的板子不一定一样)。
linino> printenv
bootargs=console=ttyATH0,115200 board=linino-yun mem=64M rootfstype=squashfs,jffs2 noinitrd mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,14656k(rootfs),1280k(kernel),64k(nvram),64k(art),15936k@0x50000(firmware)
bootcmd=bootm 0x9fea0000
这意味着有以下分区:
u-boot 0 to 256K (0x0 - 0x40000)
u-boot-env 256k to 320k (0x40000 - 0x50000)
rootfs (squashfs) 320k to 14976k (0x50000 - 0xea0000)
kernel 14976k to 16256k (0xea0000 - 0xfe0000)
nvram 16256k to 16320k (0xfe0000 - 0xff0000)
art 16320k to 16384k (0xff0000 - 0x1000000)
rootfs分区为14M,比rootfs镜像文件大很多(不到8MB)所以理论上你可以把内核镜像移动到更低的地址。为此,您需要修改 u-boot 环境块中的内核引导行(rootfs
a 和 kernel
分区大小)和 bootcmd
参数,以便 u-boot 知道新的位置内核位于。
Flash 被映射到 0x9f000000
所以 bootcmd
中的值应该是 0x9f000000
+ 内核的字节偏移量。
我不确定是否存在用于对闪存进行任何持久更改的覆盖文件系统。您可以启动到现有系统和 post df -h
和 cat /proc/mounts
的输出吗?
我正在尝试 运行 linux 在 Arduino Yun 开发板上。 Arduino 开发板包含 Atheros AR9331 chipset
在 U-Boot 上这些是我正在执行的步骤:
1- 下载内核:
ar7240> tftp 0x80060000 openwrt-ar71xx-generic-uImage-lzma.bin;
Load address: 0x80060000
Loading: #################################################################
#################################################################
#################################################################
#################################################################
######################
done
Bytes transferred = 1441863 (160047 hex)
2- 擦除闪存以复制内核:
ar7240> erase 0x9fEa0000 +0x160047
Error: end address (0xa0000046) not in flash!
Bad address format
这就是问题所在 0x9fEa0000 +0x160047
似乎超出了 flash 的总大小。
所以我的问题是:
1-我如何计算 Uboot 中为闪存保留的内存总量(从它开始和结束的地址),我正在考虑将 0x9fEa0000
更改为更少的地址,但我是害怕我会伤害其他东西
这是帮助的输出:
ar7240> help
? - alias for 'help'
boot - boot default, i.e., run 'bootcmd'
bootd - boot default, i.e., run 'bootcmd'
bootm - boot application image from memory
cp - memory copy
erase - erase FLASH memory
help - print online help
md - memory display
mm - memory modify (auto-incrementing)
mtest - simple RAM test
mw - memory write (fill)
nm - memory modify (constant address)
ping - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
progmac - Set ethernet MAC addresses
reset - Perform RESET of the CPU
run - run commands in an environment variable
setenv - set environment variables
tftpboot- boot image via network using TFTP protocol
version - print monitor version
2- 是否有人对 Atheros AR9331 chipset 有经验可以帮助我从数据表
中找到 Flash 映射(从它开始和结束的地方)您可以从内核引导命令行确定闪存布局。在 u-boot 中 运行 命令 printenv
或引导到现有内核并查看引导日志。您需要找到如下内容:
(网上有很多教程,我从https://finninday.net/wiki/index.php/Arduino_yun那里拿了一个,你的板子不一定一样)。
linino> printenv
bootargs=console=ttyATH0,115200 board=linino-yun mem=64M rootfstype=squashfs,jffs2 noinitrd mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,14656k(rootfs),1280k(kernel),64k(nvram),64k(art),15936k@0x50000(firmware)
bootcmd=bootm 0x9fea0000
这意味着有以下分区:
u-boot 0 to 256K (0x0 - 0x40000)
u-boot-env 256k to 320k (0x40000 - 0x50000)
rootfs (squashfs) 320k to 14976k (0x50000 - 0xea0000)
kernel 14976k to 16256k (0xea0000 - 0xfe0000)
nvram 16256k to 16320k (0xfe0000 - 0xff0000)
art 16320k to 16384k (0xff0000 - 0x1000000)
rootfs分区为14M,比rootfs镜像文件大很多(不到8MB)所以理论上你可以把内核镜像移动到更低的地址。为此,您需要修改 u-boot 环境块中的内核引导行(rootfs
a 和 kernel
分区大小)和 bootcmd
参数,以便 u-boot 知道新的位置内核位于。
Flash 被映射到 0x9f000000
所以 bootcmd
中的值应该是 0x9f000000
+ 内核的字节偏移量。
我不确定是否存在用于对闪存进行任何持久更改的覆盖文件系统。您可以启动到现有系统和 post df -h
和 cat /proc/mounts
的输出吗?