u-boot에서 spi 플래시가 두 번 감지되는 이유는 무엇입니까?

u-boot에서 spi 플래시가 두 번 감지되는 이유는 무엇입니까?

이것은 로그의 일부입니다유스타트Avnet Microzed 보드에서 실행 - ARM CORTEX A9:

[Thu Jun 26 17:40:53.656 2014]

[Thu Jun 26 17:40:53.656 2014]

[Thu Jun 26 17:40:53.656 2014] U-Boot 2013.07 (Jun 26 2014 - 17:34:41)

[Thu Jun 26 17:40:53.656 2014]

[Thu Jun 26 17:40:53.656 2014] 1 GiB

[Thu Jun 26 17:40:53.671 2014] SF: Detected S25FL129P_64K/S25FL128S_64K with page size 64 KiB, total 16 MiB

[Thu Jun 26 17:40:53.703 2014] *** Warning - bad CRC, using default environment

[Thu Jun 26 17:40:53.703 2014]

[Thu Jun 26 17:40:53.703 2014] In:    serial

[Thu Jun 26 17:40:53.703 2014] Out:   serial

[Thu Jun 26 17:40:53.703 2014] Err:   serial

[Thu Jun 26 17:40:53.703 2014] U-BOOT for ab

[Thu Jun 26 17:40:53.703 2014]

[Thu Jun 26 17:40:53.703 2014]

[Thu Jun 26 17:40:53.703 2014] SF: Detected S25FL129P_64K/S25FL128S_64K with page size 64 KiB, total 16 MiB

[Thu Jun 26 17:40:54.453 2014] SF: 5242880 bytes @ 0x520000 Read: OK

[Thu Jun 26 17:40:54.453 2014]      Description:  PetaLinux Kernel

[Thu Jun 26 17:40:54.453 2014] 0x010000f0

[Thu Jun 26 17:40:54.453 2014] 4620145 Bytes = 4.4 MiB

[Thu Jun 26 17:40:54.453 2014]      Description:  Flattened Device Tree blob

[Thu Jun 26 17:40:54.453 2014] 0x01468114

[Thu Jun 26 17:40:54.453 2014] 9766 Bytes = 9.5 KiB

[Thu Jun 26 17:40:54.453 2014]      Hash algo:    crc32

[Thu Jun 26 17:40:54.453 2014]      Hash value:   9a94aca8

[Thu Jun 26 17:40:54.453 2014]      Hash algo:    sha1

[Thu Jun 26 17:40:54.453 2014]      Hash value:
97b81e3014decb706ff19e61e1227dace97d4232

[Thu Jun 26 17:40:54.453 2014] crc32+ sha1+  Uncompressing Kernel Image ... OK

.
.
.

다음 줄이 두 번 나타나는 것을 확인했습니다.

SF: S25FL129P_64K/S25FL128S_64K 감지됨, 페이지 크기 64KiB, 총 16MiB

이는 다음 기능에 해당합니다.spi_flash_probedrivers/mtd/spi/spi_flash.c에서

내가 알 필요가:

1-왜 두 번 감지합니까?

2- 이 함수를 호출하는 파일의 이름과 위치(두 번).

3- 두 번째 감지가 상당히 느립니다. 이유는 무엇입니까?

이것은 내 u-boot 환경 변수입니다.

U-Boot-PetaLinux> printenv
autoload=no
baudrate=115200
bootdelay=4
bootenvsize=0x00020000
bootenvstart=0x00500000
bootfile=image.ub
bootsize=0x00500000
bootstart=0x00000000
clobstart=0x1000000
console=console=ttyPS0,115200
cp_dtb2ram=sf probe 0; sf read ${clobstart} ${dtbstart} ${dtbsize}
dtbboot=sf probe 0; sf read ${netstart} ${kernstart} ${kernsize}; sf read ${dtbnetstart} ${dtbstart} ${dtbsize}; bootm ${netstart} - ${dtbnetstart}
dtbnetboot=tftp ${netstart} image.ub; tftp ${dtbnetstart} system.dtb; bootm ${netstart} - ${dtbnetstart}
dtbnetstart=0x1500000
eraseconf=sf probe 0; sf erase ${confstart} ${confsize}
eraseenv=sf probe 0; sf erase ${bootenvstart} ${bootenvsize}
ethact=Gem.e000b000
ethaddr=00:0a:35:00:07:c0
fault=echo $img image size is greater than allocated place - $img is NOT UPDATED
get_dtb=run cp_dtb2ram; fdt addr ${clobstart}
hostname="Peta_MicroZed"
install_dtb=sf probe 0; sf erase ${dtbstart} ${dtbsize};sf write ${clobstart} ${dtbstart} ${filesize}
install_jffs2=sf probe 0; sf erase ${jffs2start} ${jffs2size};sf write ${clobstart} ${jffs2start} ${filesize}
install_kernel=sf probe 0; sf erase ${kernstart} ${kernsize};sf write ${fileaddr} ${kernstart} ${filesize}
install_uboot=sf probe 0; sf erase ${bootstart} ${bootsize};sf write ${clobstart} ${bootstart} ${filesize}
kernsize=0x00500000
kernstart=0x00520000
load_boot=tftp ${clobstart} BOOT.BIN
load_dtb=tftp ${clobstart} system.dtb
load_jffs2=tftp ${clobstart} rootfs.jffs2
load_kernel=tftp ${clobstart} image.ub
loadaddr=0x1000000
mtdids=nor0=0
mtdparts=mtdparts=0:5M(boot),128K(bootenv),851968(image)
nc=setenv stdout nc;setenv stdin nc;
ncip=192.168.1.11
netboot=tftp ${netstart} image.ub && bootm
netstart=0x1000000
psserial0=setenv stdout ttyPS0;setenv stdin ttyPS0
sd_update_boot=echo Updating BOOT from SD;mmcinfo && fatload mmc 0:1 ${clobstart} BOOT.BIN && run install_uboot
sd_update_kernel=echo Updating Kernel from SD;mmcinfo && fatload mmc 0:1 ${clobstart} ${bootfile}&& set fileaddr ${clobstart}&&run install_kernel
sdboot=echo boot Petalinux; mmcinfo && fatload mmc 0 ${netstart} ${bootfile}&& bootm
serial=setenv stdout serial;setenv stdin serial
serverip=192.168.1.11
sfboot=sf probe 0; sf read ${netstart} ${kernstart} ${kernsize}; bootm ${netstart}
silent=1
silent-kinux=yes
silent_linux=yes
test_crc=if imi ${clobstart}; then run test_img; else echo $img Bad CRC - $img is NOT UPDATED; fi
test_img=setenv var "if test ${filesize} -gt ${psize}; then run fault; else run ${installcmd}; fi"; run var; setenv var
update_boot=setenv img BOOT.BIN; setenv psize ${bootsize}; setenv installcmd install_uboot; run load_boot test_img; setenv img; setenv psize; setenv installcmd
update_dtb=setenv img DTB; setenv psize ${dtbsize}; setenv installcmd install_dtb; run load_dtb test_img; setenv img
update_jffs2=setenv img JFFS2; setenv psize ${jffs2size}; setenv installcmd install_jffs2; run load_jffs2 test_img; setenv img; setenv psize; setenv installcmd
update_kernel=setenv img KERNEL; setenv psize ${kernsize}; setenv installcmd "install_kernel"; run load_kernel test_crc; setenv img; setenv psize; setenv installcmd
varify=n

Environment size: 3214/131068 bytes

답변1

디렉토리에 있는 보드 구성 파일의 이름은 무엇입니까? 디렉토리의 어디에 보드 관련 파일이 있습니까 include/configs/? board/댓글 권한이 없어서 질문글을 답변으로 올려야겠습니다. 나는 spi 플래시 드라이버 초기화가 arch/arm/lib/board.c보드 특정 파일에서 한 번, 보드 특정 파일에서 한 번, 두 번 수행된 것으로 의심되므로 SPI 플래시가 두 번 검색되는 것을 볼 수 있습니다.

답변2

처음은 아마도 SPI에서 환경을 읽는 것일 것입니다. 그냥 그 설정을 사용하십시오 CONFIG_ENV_SPI_MAX_HZ.

두 번째는 부팅하는 것인데, 이는 사용자 환경에서 sfboot 라인을 실행하는 것입니다.

첫 번째 명령은 다음과 같습니다.

sf probe 0

그 사람은 속도를 사용합니다 CONFIG_SF_DEFAULT_SPEED. 아마도 이것은 더 느릴 것입니다.

환경 명령을 업데이트하여 읽을 수 있습니다.

sf probe 0 10000000

(10MHz) 더 빠릅니다. 아니면 변경할 수 있습니다 CONFIG_SF_DEFAULT_SPEED.

help sf도움 요청을 참조하세요 .

답변3

이는 일부 중요한 UBoot 환경 변수를 재설정한 결과인 것으로 보입니다. 첫 번째 스캔 직후와 두 번째 스캔 전, 즉 두 개의 환경 스냅샷을 찍을 수 있습니까?

MTD 재검색에서도 동일한 문제가 발생했습니다. 왜냐하면mtdids그 동안 변수가 지워집니다. 나는유비파트(..)쿼리 변수가 설정되지 않은 경우 두 번째 MTD 설문조사를 수행합니다. 내 생각에는 당신도 비슷한 문제가 있다고 생각합니다.

관련 정보