sd 카드에서 [임베디드] 리눅스를 어떻게 부팅합니까?


6

DM816x evm 보드에서 빠른 임베디드 리눅스 시스템을 함께 해킹하고 있습니다. 이전에는 TFTP와 NFS를 사용하여 커널과 루트 파일 시스템을 보드에로드했습니다. 이제 SD 카드에서 모든 것을로드하도록 전환하려고합니다.

uBoot와 커널 이미지가 하나의 파티션에 있고 rootFS가 다른 파티션에 있도록 카드를 분할했습니다. 전원을 켜면 Uboot가 올바르게 시작되고 커널이 성공적으로 시작됩니다. 그러나 커널은 루트 파일 시스템을 마운트 할 수 없습니다. SD (mmc) 카드를 인식하지 못하는 것 같습니다. 이 오류 메시지가 나타납니다.

VFS: Cannot open root device "mmcblk0p2" or unknown-block(2,0)
Please append a correct "root=" boot option; here are the available partitions:
1f00             256 mtdblock0  (driver?)
1f01               8 mtdblock1  (driver?)
1f02            2560 mtdblock2  (driver?)
1f03            1272 mtdblock3  (driver?)
1f04            2432 mtdblock4  (driver?)
1f05             128 mtdblock5  (driver?)
1f06            4352 mtdblock6  (driver?)
1f07          204928 mtdblock7  (driver?)
1f08           50304 mtdblock8  (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)

나는 여기에 근본적인 것을 놓친 것처럼 느낍니다. 로드하려는 루트 장치를 인식하지 못하는 이유는 무엇입니까?

다음은 실행중인 uBoot 부팅 스크립트입니다.

setenv bootargs console=ttyO2,115200n8 root=/dev/mmcblk0p2 rw mem=124M earlyprink vram=50M ti816xfb.vram=0:16M,1:16M,2:6M ip=off noinitrd;mmc init;fatload mmc 1 0x80009000 uImage;bootm 0x80009000

내 현재 생각은 커널을 다시 컴파일하고 MMC 장치에서 루트 파일 시스템을로드하는 옵션을 명시 적으로 활성화해야한다고 생각하게합니다. 시간이 많이 걸리는 작업을 수행하기 전에 이에 대한 몇 가지 의견을 듣고 싶습니다.

루트 파일 시스템 장치 사양이 꺼져있을 가능성이 있습니다. 확인하려면 다음을 시도하십시오. TFTP / NFS를 사용하는 이전 부팅 구성에서 카드 장치를 볼 수 있습니까? 그런 다음 / dev / mmcblk0p2를 사용하여 파일 시스템을 카드에 마운트 할 수 있습니까? 파티션 인덱스를 하나씩 해제 할 수 있습니까? / dev / mmcblk0p1? 카드 기반 파일 시스템에 성공적으로 액세스 한 장치 및 파티션은 부팅 인수에서 "root ="다음의 인수 여야합니다.
Digikata

1
임베디드 소프트웨어 개발은 ​​주제를 벗어난 사람이 아닙니다. 이것은 데스크탑을 부팅하는 것과는 다릅니다.
Karl Bielefeldt

답변:


5

DM816x EVM의 일부 샘플 부트 라인은 rootdelay = 2에서 rootdelay = 10까지입니다. bootargs에서 누락되었으므로 2의 하단에서 시작하여 mmc 장치를 온라인 상태로 만드는 데 약간의 시간이 필요한지 확인하는 것이 좋습니다.


1
우연히 필라델피아 근처에 살고 있습니까? 그렇다면 맥주를 사고 싶습니다. 문제가 해결되었습니다! 정말 고맙습니다. 나는 이것을 혼자서 시도조차하지 않았을 것입니다.
Brandon Yates

나는 캘리포니아 남부에 있습니다. 기꺼이 도와 주셔서 감사합니다. 임베디드 리눅스 노력에 행운을 빕니다!
Digikata

이것은 내 베이컨을 구했습니다. SDHC 카드로 부팅 할 때 매우 비정상적 인 pcengines.ch (APU2-라우터 용 멋진 제품)의 SBC에 완전히 당황했습니다. 때로는 때로는 실패하고 패닉을 일으켰습니다. 루트를 마운트하기 전에 1 초의 지연을 두는 것이 문제를 해결 한 것으로 보입니다.
Nicole

2

예. 루트 파일 시스템 드라이버는 모듈이 아닌 커널에 내장되어 있어야합니다. 그 이유는 모듈이 루트 파일 시스템에서로드되기 때문입니다. 커널을 재 컴파일하는 것은 그리 큰 일이 아닙니다. 처음 몇 번은 까다 롭지 만 커널 해커 만이 이해할 수있는 것은 아닙니다.


답장을 보내 주셔서 감사합니다. @Digikata의 위의 조언에 따라 NFS 및 TFTP를 사용하여 시스템을로드했으며 그 후에 / dev / mmcblk0p1을 마운트 할 수있었습니다. 이것을 완전히 해석하는 방법을 잘 모르겠습니다. 커널이 rootfs를 마운트 한 후 mmc 용 장치 드라이버를로드합니까?

가능성이 높습니다. lsmod부팅 한 후 수행하십시오. mmc 관련 모듈이 표시되면 루트 파일 시스템이 나타난 후로드되고 있음을 의미합니다.
Karl Bielefeldt

MMC 모듈이로드되지 않았습니다. 시작하는 동안이 오류가 콘솔에 표시됩니다 "Jan 1 00:00:06 udevd [79] : inotify_add_watch (6, / dev / mmcblk0, 10) 실패 : 해당 파일 또는 디렉토리 없음"사용중인 커널은 우리가 더 이상 일하지 않고 혼란스러워하는 제 3 자에 의해 제공되는 경우, 어쨌든 신선한 커널을 다시 컴파일하는 것이 가장 좋습니다. 도와 주셔서 감사합니다.

/ dev / mmcblk0p1을 마운트 할 수 있는지 확인한 후 p1은 루트 파일 시스템 파티션이라고 가정 했습니까? bootargs를 root = / dev / mmcblk0p2에서 root = / dev / mmcblk0p1로 변경하고 새 루트 장치로 카드에서 부팅을 다시 시도 했습니까?
Digikata

1
MMC 모듈이로드되지 않았지만 mmc를 성공적으로 마운트 한 경우 mmc 모듈이 이미 정적으로 커널에 컴파일되었으며 커널 재 컴파일이 필요하지 않음을 나타냅니다. (나는 동의하지만 커널을 사용하는 데 익숙해 지도록 할 가치가있다).
Digikata
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.