마더보드는 NAND 플래시 장치인 NAND 32MiB에서 임베디드 Linux v2.6.26.5를 실행하는 ARM926EJ CPU를 사용합니다. Linux는 NAND 장치의 MTD 파티션에 있습니다.
직렬 인터페이스에서 Linux 커널 이미지(SP2Xcybertan_rom_bin)를 백업하는 방법은 무엇입니까? tftp를 통해 보드에서 호스트 PC로 파일을 전송하는 TFTP 옵션이 없기 때문입니다. 낸드를 일부 메모리 주소로 읽고 출력을 터미널에 덤프하고 저장한 다음 16진수를 이진수로 변환할 수 있습니다.
nand read 0x20000000 0x80000 0x0017FF80
md.b 0x20000000 0x0017FF80
부팅 프로세스 로그에서:
U-Boot 2009.03 (Oct 06 2011 - 20:04:03)
Stack:->21F1EC74 U-Boot code: 21FC4D00->21FF9454 BSS:->21FFFF3B
CPU: PNX8181-2B OM6xxx-ARM926EJ-S(ARMv5TEJ) @ 221MHz(armclk), 110MHz(hclk)
Board: Vega_PNX8181_BaseStation Platform IV (LC)
I2C: ready
RAM Configuration:
Bank #0: 20000000 32 MB
NAND: 32 MiB
In: serial
Out: serial
Err: serial
Use Full Image's Kernel
Net: VLAN Mode
L2 switch present
ETN1
Hit any key to stop autoboot: 0
Loading from NAND 32MiB 3,3V 8-bit, offset 0x80000
Image Name: SP2Xcybertan_rom_bin
Created: 1970-01-01 0:00:-1 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1572736 Bytes = 1.5 MB
Load Address: 20008000
Entry Point: 20008000
## Booting kernel from Legacy Image at 20200000 ...
Image Name: SP2Xcybertan_rom_bin
Created: 1970-01-01 0:00:-1 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 1572736 Bytes = 1.5 MB
Load Address: 20008000
Entry Point: 20008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK
Starting kernel ...
Uncompressing Linux.........
환경 변수
firetux # printenv
baudrate=115200
ethaddr=FF:FF:FF:FF:FF:FF
netmask=255.255.255.0
ipaddr=192.168.1.1
serverip=192.168.1.100
bootfile=firetux.kernel
bootcmd1=setenv bootargs ${bootargs} && nboot 0x20200000 0 ${image_addr} && bootm 0x20200000
bootcmd2=setenv bootargs ${bootargs} && tftpboot 20200000 firetux.kernel && bootm 20200000
phymode=auto
mtdids=nand0=gen_nand
unlock=yes
verify=y
update.uboot=echo Update u-boot && tftpboot 0x20000000 nandboot.flash && nand erase 0x0 0x03ffff && nand write.jffs2 0x20000000 0x0 ${filesize}
update.kernel=echo Update kernel && tftpboot 0x20000000 uImage && nand erase 0x80000 0x180000 && nand write.jffs2 20000000 0x80000 0x180000
update.romimg=echo Update RomImage && tftpboot 0x20000000 romimage.img && nand erase 0x80000 0x13e0000&& nand write.jffs2 20000000 0x80000 ${filesize}
update.halfimg=echo Update HalfImage && tftpboot 0x20000000 recovery.img && nand erase 0x1460000 0x700000&& nand write.jffs2 20000000 0x1460000 ${filesize}
eraseenv=echo Erase Environment && nand erase 0x60000 0x20000
HwModel=Hw_Model=SPA122
bootcmd=run bootcmd1
halfImage=half_image=0
cy_boot_code_ver=1.0.1 (Oct 6 2011 - 20:04:00)
RouterMode=Router_Mode=0
stdin=serial
stdout=serial
stderr=serial
bootcmd=run bootcmd1
image_addr=0x80000
bootargs=console=ttyS1,115200n8 rootfstype=squashfs noalign half_image=0 verify=y Hw_Model=SPA122 Router_Mode=0
ethact=ETN1
bootdelay=3
부팅 프로세스 측면에서 커널(uImage)과 romimage(romimg.img)의 차이점은 무엇입니까?
답변1
이를 수행하는 단계는 다음과 같습니다.
먼저 uImage 업데이트가 정확하다고 가정합니다.
update.kernel=echo Update kernel && tftpboot 0x20000000 uImage && nand erase 0x80000 0x180000 && nand write.jffs2 20000000 0x80000 0x180000
그 다음에:
nand read <memory offset> <nand start offset> <size>
md <memory offset> <size>
그래서:
nand read 0x20000000 0x80000 0x180000
md 0x20000000 0x180000
그런 다음 일련 번호에 대한 입력을 기록하고 이를 스크립트로 구문 분석하여 16진수 바이트를 가져와 이진 형식으로 파일에 출력하는 방법을 찾아야 합니다.