안녕하세요!
여기서 좋은 정보를 얻는 사람중에 하나입니다.
커널 포팅 중에 참 알기 어려운 증상이 있네요.
파일시스템 파티션을 MTD로 초기화를 했습니다.
파일시스템은 Squash FS 을 사용하려고 합니다.
그런데 최종적으로 Squash FS이 마운트가 되질 않습니다.
아래는 커널 로그 입니다.
squashfs: version 4.0 (2009/01/31) Phillip Lougher JFFS2 version 2.2. (NAND) ⓒ 2001-2006 Red Hat, Inc. fuse init (API version 7.13) msgmni has been set to 118 alg: No test for stdrng (krng) io scheduler noop registered (default) Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled serial8250: ttyS0 at MMIO 0x0 (irq = 8) is a 16550A loop: module loaded [DEBUG] nflash_mtd_init, 681!!!! The first offset=200000, 2nd offset=1400000 Boot partition size = 524288(0x80000) lookup_nflash_rootfs_offset: offset = 0x200000 nflash: squash filesystem with lzma found at block 30 2nd offset 1400000 lookup_nflash_rootfs_offset: offset = 0x1400000 nflash: squash filesystem with lzma found at block 172 Creating 6 MTD partitions on "nflash": 0x000000000000-0x000000080000 : "boot" 0x000000080000-0x000000200000 : "nvram" 0x000000200000-0x000001400000 : "linux" 0x0000003c1f04-0x000001400000 : "rootfs" 0x000001400000-0x000002600000 : "linux2" 0x0000015934a8-0x000002600000 : "rootfs2" Creating 1 MTD partitions on "brcmnand": 0x000002600000-0x000007f00000 : "brcmnand" PPP generic driver version 2.4.2 NET: Registered protocol family 24 Netlink kernel socket create failed GACT probability on ....... 중략 List of all partitions: 1f00 512 mtdblock0 (driver?) 1f01 1536 mtdblock1 (driver?) 1f02 18432 mtdblock2 (driver?) 1f03 16632 mtdblock3 (driver?) 1f04 18432 mtdblock4 (driver?) 1f05 16818 mtdblock5 (driver?) 1f06 91136 mtdblock6 (driver?) No filesystem could mount root, tried: squashfs vfat msdos fuseblk Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,3)
위와 같이 마지막에 메시지가 뜨면서 마운트가 되질 않습니다.
그래서 다음과 같이 테스트를 해봤습니다만.....
1) Squash FS의 모듈 버전이 4.0 인데 기존의 컴파일 환경에서는 3.0 이었음. 따라서 파일시스템 생성툴을 4.1 혹은 4.2로
업그레이드후 파일시스템을 생성했지만, 동일한 증상으로 마운트 되질 않음. (이상하게도 버전업을 하면 mtd 파티션의
어드레스 값이 이상하리 만큼 늘어납니다...)
2) 위와 같은 이유로 압축 관련 모듈이 추가 안될걸로 판단되어 lzma를 포함하여 생성하였으나 마찬가지...
3) 커널에서 뭔가 이상동작을 하는지 확인하기 위하여 squash fs의 super block 정보 얻어오는 함수를 확인한 결과
희안하게 squashfs_read_table( ) 함수에서 squashfs_super_block 구조체에 s_magci등등의 정보들을 얻어오지 못합니다.
따라서 커널에서는 s_magic, s_major 등의 값이 fffffff 이므로 에러를 유발하고 squashfs으로 인식하지 못함
4) 실제 squashfs_super_block 구조체에 각 정보를 write하는 부분이 squashfs_read_table( )에서 하는걸로 생각되는데요..
이상한게 버퍼에 저장된 정보를 squashfs_super_block 구조체에 복사하는걸로 보이는데요, 제대로 복사를 하지 못하더군요.
그래서 버퍼의 이상유무를 테스트를 해볼려고 버퍼의 어드레스에 직접 데이터를 write해봤는데, 정상적으로 write됩니다.
5) 그렇다면 파일시스템 바이너리 자체가 뭔가 이상하다고 생각이 되는데요... 어떤게 이상인건지 알기가 어렵네요..
6) mksquashfs 4.2 툴로 바이너리를 생성하여 개발서버의 페도라12(2.6.32) 버전에서 마운트시에는 정상동작함..
커널 버전은 2.6.32.27 입니다. 참고로 2.6.22 버전에서는 squashfs이 잘 마운트 되고, 위와 같이 squashfs_super_block 구조체의
값들이 정상적으로 들어가 있는 것을 확인하였습니다.
고수님들의 친절한 답변 부탁드립니다.^^
댓글 0
.