我有一个廉价的中文IP摄像机,它在8 MB的SPI闪存IC上运行linux(准确地说,是busybox)。

我正在尝试访问该设备。

它有一个硬件串行端口,我已经可以访问它,但是linux终端似乎已被禁用或只是被关闭了。基本上,我收到“正在加载linux内核”消息,然后串行端口变得无响应。

是否有任何方法可以使用U-Boot在设备上检索固件映像?

U-boot日志:

U-Boot 2010.06-svn (Jun 16 2014 - 09:36:52)

DRAM:  256 MiB
Check spi flash controller v350... Found
Spi(cs1) ID: 0xC2 0x20 0x17 0xC2 0x20 0x17
Spi(cs1): Block:64KB Chip:8MB Name:"MX25L6406E"
envcrc 0x5878e4b2
ENV_SIZE = 0xfffc
In:    serial
Out:   serial
Err:   serial
Press Ctrl+C to stop autoboot
CFG_BOOT_ADDR:0x58040000
8192 KiB hi_sfc at 0:0 is now current device

### boot load complete: 1884992 bytes loaded to 0x82000000
### SAVE TO 80008000 !
## Booting kernel from Legacy Image at 82000000 ...
   Image Name:   linux
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    1884928 Bytes = 1.8 MiB
   Load Address: 80008000
   Entry Point:  80008000


load=0x80008000,_bss_end=80829580,image_end=801d4300,boot_sp=807c71d8
   Loading Kernel Image ... OK
OK

Starting kernel ...

Uncompressing Linux... done, booting the kernel.


和u-boot环境:

hisilicon # printenv
bootcmd=fload;bootm 0x82000000
baudrate=115200
bootfile="uImage"
da=mw.b 0x82000000 ff 1000000;tftp 0x82000000 u-boot.bin.img;sf probe 0;flwrite
du=mw.b 0x82000000 ff 1000000;tftp 0x82000000 user-x.cramfs.img;sf probe 0;flwrite
dr=mw.b 0x82000000 ff 1000000;tftp 0x82000000 romfs-x.cramfs.img;sf probe 0;flwrite
dw=mw.b 0x82000000 ff 1000000;tftp 0x82000000 web-x.cramfs.img;sf probe 0;flwrite
dc=mw.b 0x82000000 ff 1000000;tftp 0x82000000 custom-x.cramfs.img;sf probe 0;flwrite
up=mw.b 0x82000000 ff 1000000;tftp 0x82000000 update.img;sf probe 0;flwrite
ua=mw.b 0x82000000 ff 1000000;tftp 0x82000000 upall_verify.img;sf probe 0;flwrite
tk=mw.b 0x82000000 ff 1000000;tftp 0x82000000 uImage; bootm 0x82000000
dd=mw.b 0x82000000 ff 1000000;tftp 0x82000000 mtd-x.jffs2.img;sf probe 0;flwrite
ipaddr=192.168.1.10
serverip=192.168.1.107
netmask=255.255.255.0
ethaddr=00:12:12:4b:6b:b6
HWID=8043420004048425
ob_start=0
ob_data=7b
appSystemLanguage=SimpChinese
appVideoStandard=PAL
bootdelay=5
bootargs=mem=40M console=ttyAMA1,115200 console=ttyAMA0,115200 root=/dev/mtdblock1 rootfstype=cramfs mtdparts=hi_sfc:256K(boot),3520K(romfs),2560K(user),1280K(web),256K(custom),320K(mtd)
stdin=serial
stdout=serial
stderr=serial
verify=n
ver=U-Boot 2010.06-svn (Jun 16 2014 - 09:36:52)

Environment size: 1272/65532 bytes


U -引导帮助提示(我认为您可以使用可选模块来构建u-boot。这显示了该u-boot实例内置的内容吗?):

hisilicon # help
?       - alias for 'help'
base    - print or set address offset
boot    - boot default, i.e., run 'bootcmd'
bootd   - boot default, i.e., run 'bootcmd'
bootm   - boot application image from memory
bootp   - boot image via network using BOOTP/TFTP protocol
cmp     - memory compare
cp      - memory copy
crc32   - checksum calculation
fload   - fload  - load binary file from a filesystem image for system boot

flwrite - SPI flash sub-system
getinfo - print hardware information
go      - start application at address 'addr'
help    - print command description/usage
lip     - lip      - set local ip address but not save to flash

loadb   - load binary file over serial line (kermit mode)
loady   - load binary file over serial line (ymodem mode)
loop    - infinite loop on address range
mac     - mac      - set mac address and save to flash

md      - memory display
mii     - MII utility commands
mm      - memory modify (auto-incrementing address)
mtest   - simple RAM read/write test
mw      - memory write (fill)
nm      - memory modify (constant address)
ping    - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
rarpboot- boot image via network using RARP/TFTP protocol
reset   - Perform RESET of the CPU
run     - run commands in an environment variable
saveenv - save environment variables to persistent storage
setenv  - set environment variables
sf      - SPI flash sub-system
sip     - sip      - set server ip address but not save to flash

tftp    - tftp  - download or upload image via network using TFTP protocol
version - print monitor version


请注意在bootargs变量中指定的控制台来自我的实验。我已经尝试了ttyAMA0ttyAMA1tty0和许多其他类似的变量。

处理器是HiSilicon Hi3518,它是ARM SoC。

现在,我唯一想到的就是将板上的Flash IC热风吹走。并以这种方式转储它,但这是很多工作,我宁愿先看看是否有软件选项。

评论

通常不需要拆焊:digikey.com/product-detail/zh/5250/501-1311-ND/745102

该主题的作者告诉您-您有这款相机吗?实际上,内核已加载,您可以登录到摄像机的Web界面吗?

在该业务上有任何成功吗? :)

我可以确认user2177319的方法有效。我在这里为我的IP摄像机提取了romfs。对我而言,不明显的是通过HTTP为Web /管理界面提供服务的CGI脚本的位置。我猜Linux必须先启动,然后再从Flash挂载更多文件?

#1 楼

我在Kindle上执行此操作的方式是将闪存分区加载到内存中,然后使用内存转储命令以十六进制格式转储它们(然后使用一些Python脚本将十六进制转换回二进制文件)。这有点慢,但确实达到了目标。

您的U-Boot似乎没有bbm命令,但fload - load binary file from a filesystem image for system bootsf - SPI flash sub-system听起来很有希望,我建议您对其进行探索。您也许还可以使用tftp通过网络发送图像,而不必使用控制台转储它们。

评论


真的,我也可以。您如何确定闪存分区甚至在哪里?

–假名
2014-09-24 10:05



好的,发出空的fload命令似乎已将内核加载到RAM中。 ###引导加载完成:已将1884992字节加载到0x82000000,并且在引导消息中将内核指定为1884928。

–假名
2014年9月24日上午10:11

并且fload似乎不接受参数。不管我通过什么,它都只会加载内核。

–假名
2014年9月24日10:20在

那科幻呢?

–伊戈尔·斯科钦斯基♦
2014年9月24日上午10:26

AFICT,sf仅安装SPI闪存。我能找到的唯一动词是sf probe,它似乎可以测试设备的存在和/或使其可用:hisilicon#sf probe 0 8192 KiB hi_sfc at 0:0现在是当前设备不幸的是,似乎没有帮助,所以如果它接受其他动词,我不知道如何发现它们。

–假名
2014-09-24 10:28



#2 楼


我使用sf read,效果很好。可以这样称为

sf read [addr] [offset] [len]


因此,对于您而言,阅读romf看起来像这样:

sf probe 0; sf read 0x82000000 0x40000 0x370000


然后您可以将文件传输到tftp服务器:

tftp 0x82000000 romfs.cramfs 0x370000


还可以使用sf写入SPI闪存(更多信息,请参见此处)。 br />

评论


我想知道,这真的有效吗?哪个U-Boot版本? u-boot中的tftp是将文件上传到内存的一种传输方式。如果您指的是Busybox,那么哪个呢? Busybox tftp没有这样的命令语法。

– triwo
17 Dec 8'在15:12



是的!版本“ U-Boot 2010.06(Jan 05 2015-15:46:28)”,我刚刚使用此答案从设备中转储了128M NAND闪存。

– ogurets
18年11月6日在14:51

@triwo tftp u-boot命令是双向的:如果您指定地址和文件名,则它将从tftp服务器下载文件。如果您另外指定长度,则它将文件上传到tftp服务器

– Serge
18年1月1日下午16:52

@Serge这取决于特定设备上的u-boot实现。在我使用的所有CPE调制解调器和路由器中,u-boot仅支持从外部tftp到设备内存的单向文件传输。

– triwo
18/12/2在18:12

@triwo当然可以:您可以自定义/删除u-boot UI的任何部分。我指的是hi35xx的SDK随附的基本版本

– Serge
18/12/3在19:40

#3 楼

如果您真的很幸运,并且可以找到一个支持该芯片组或足够多的芯片组(可以通过TFTP或ymodem引导)的系统,则可以从另一个系统(例如OpenWrt)创建Linux initramfs映像。串行控制台。

内核中(或即将出现)对hisilicon似乎有某种支持,因此您也可以启动buildroot映像。