타겟 부팅 시에 에러 발생 시에 문제를 해결하는 방법을 정리하였다.
Saturn 6
특정 파티션을 마운트 하지 못할 때
필자의 경우, 한 파티션에 원래의 파티션 크기보다 큰 파일을 넣고 .epk 를 생성 후, 이를 flash 에 write 하고 부팅하는 과정에서 이러한 문제가 발생하였다.
mstar # nand erase mstar # swu a.epk
현재 파티션의 각 사이즈 및 사용량을 확인하기 위해서는 아래와 같이 명령한다.
mstar # mtdinfo MTD Partition Information ----------------------------------------------------------------------------- cur epk ver : 0x030100 old epk ver : 0x030100 [ 0] "bbminfo" : 0x00000000-0x00020000 (0x00020000) [ 1] "boot" : 0x00020000-0x000a0000 (0x00080000) : "u-boot-nand.bin"[0] - 0x000000 : (U/V) [ 2] "mtdinfo" : 0x000c0000-0x000e0000 (0x00020000) : "MTD.INFO"[0] - 0x000000 : (U/V) [ 3] "rootfs" : 0x000e0000-0x005e0000 (0x00500000) : "rootfs.squashfs"[3211264] - 0x000001 : (U/V) [ 4] "model" : 0x005e0000-0x00680000 (0x000a0000) : "model.jffs2"[131072] - 0x030100 : (U/V) [ 5] "emanual" : 0x00680000-0x00b80000 (0x00500000) : "emanual.squashfs"[3448832] - 0x000001 : (U/V) [ 6] "ezcal" : 0x00b80000-0x01080000 (0x00500000) : "ezcal.squashfs"[3145728] - 0x000001 : (U/V) [ 7] "logo" : 0x01080000-0x01380000 (0x00300000) : "logo.img"[272896] - 0x030100 : (U/V) [ 8] "opsrclib" : 0x01380000-0x01e80000 (0x00b00000) : "opsrclib.squashfs"[0] - 0x000000 : (U/V) [ 9] "ywed" : 0x01e80000-0x04680000 (0x02800000) : "ywed.squashfs"[0] - 0x000000 : (U/V) [10] "netflix" : 0x04680000-0x05580000 (0x00f00000) : "netflix.squashfs"[0] - 0x000000 : (U/V) [11] "netid" : 0x05580000-0x055a0000 (0x00020000) : "netid.squashfs"[0] - 0x000000 : (U/V) [12] "cmndata" : 0x055a0000-0x05640000 (0x000a0000) : "cmndata.jffs2"[0] - 0x000000 : (U/V) [13] "kernel" : 0x05640000-0x05a40000 (0x00400000) : "uImage"[2045606] - 0x000001 : (U/V) [14] "lgapp" : 0x05a40000-0x06440000 (0x00a00000) : "lgapp.lzo"[8582563] - 0x030100 : (U/V) // [15] "lgres" : 0x06440000-0x07340000 (0x00f00000) : "lgres.squashfs"[11952128] - 0x000001 : (U/V) [16] "lgfont" : 0x07340000-0x07d40000 (0x00a00000) : "lgfont.img"[229376] - 0x000001 : (U/V) [17] "kernel" : 0x07d40000-0x08140000 (0x00400000) : "uImage"[2153347] - 0x000001 : (u/V) [18] "lgapp" : 0x08140000-0x08b40000 (0x00a00000) : "lgapp.lzo"[8580816] - 0x030100 : (u/V) [19] "lgres" : 0x08b40000-0x09a40000 (0x00f00000) : "lgres.squashfs"[11948032] - 0x000001 : (u/V) [20] "lgfont" : 0x09a40000-0x0a440000 (0x00a00000) : "lgfont.img"[229376] - 0x000001 : (u/V) [21] "recdb" : 0x0a440000-0x0a4e0000 (0x000a0000) [22] "system" : 0x0a4e0000-0x0a520000 (0x00040000) [23] "user" : 0x0a520000-0x0f800000 (0x052e0000) [24] "reserved" : 0x0f800000-0x10000000 (0x00800000) A. Add flash partition E. Edit flash partition R. Remove flash partition D. Default Normal F. Default Flash L. Load S. Save Q. Exit select :
예를 들어 'lgapp' 라는 파티션을 예로 들어보겠다. 파티션 크기는 '0x00a00000' 이고, 사이즈는 '8582563' 이다.
비교해보면, 약 2M 정도 남아있는 상태다.
만일 위와 같이 했음에도 불구하고 같은 현상이 반복한다면, 부트로더(SPI,NAND), 커널, 파일시스템, APP 까지 다시 write 한다.
Saturn 7
Saturn 7 에 들어오면서 변경된 점들은 다음과 같다.
BCM 3549
화면이 보이지 않을 때
백라이트도 켜진 상태에서 화면에 아무것도 보이지 않을때, 다음과 같이 한다.
3549 DV1 보드에서 화면을 보기 위해서는 수정이 필요하다. 'gp2/src/drivers/frc/ursa3/frc_ursa3.c' 파일을 아래와 같이 수정한다.
... DTV_STATUS_T FRC_URSA3_Init(void) { DTV_STATUS_T ret = NOT_OK; rprintOn("\n++++++++++++++++++++++++FRC_URSA3_Init+++++++++++++++++\n"); FRC_URSA3_SetLVDSBitNum(8); ret = OK; return ret; } ...
또다른 방법은 Debug 모드를 사용하는 것이다.
... > 52 <- 52 입력 *************Select Menu & Exit************ [0x01] SPI Firmware Download [0x02] FRC Init [0x03] MFC I2C Read [0x04] MFC I2C Write [0x05] FRC Change TruM Level [0x06] FRC Demo Mode Control [0x07] FRC Change demo bar color [0x08] FRC On/Off control [0x10] FRC Get current status [0x11] FRC Set bypass window..... [0x12] FRC Get FW version..... [0x14] FRC Show Film Mode Debug [0x20] FRC Set video block [0x21] FRC Control Spread Spectrum [0x23] FRC Debug block enable/disable [0x25] FRC Read HV total [0x26] FRC Set LVDS power [0x27] FRC Set slow frame lock [0x28] FRC Set output timing [0x29] FRC Control reverse mode [0x30] FRC Set Ti Mode bit number [0x31] FRC Set Judder level [0x32] FRC Set Blur level [0x33] FRC Set LVDS VESA/JEIDA [0x40] FRC URSA3 Internel PWM test [0x50] FRC Reset Control [0x90] FRC Reset [0x91] FRC Set download mode [0x92] FRC Chage Frame Rate [0x93] FRC All Function enable/disable [0x94] FRC Pwiz Debug Menu. [0xFF] Exit ******************************************* > 30 <- 30 입력 others:0 8bit:1 6bit:2 > 1 <- 1 입력
그러면 화면이 제대로 보일 것이다.
Flash Write 중에 에러가 발생 시
기존의 모든 Nand Flash 를 지우고 다시 설정한다.
>nand erase all ... => 이때 모든 블럭에 대해서 bad 블럭이 나오면 안된다. 나오지 않을 때까지 반복한다. 계속해서 나온다면 보드를 교체해야 한다
부트로더를 다운로드 해야 한다. 'gp2/os/bcm35xx_linux/boot' 아래에서 make 를 실행하면 컴파일되고, boot.pak 파일이 생성된다.
>sto tftp://192.168.0.1/boot.pak >reset >macprog2 00-e0-91-69-12-81 >nset >>Input '-' to remove value<< netDev : eth0 - NET_SIPADDR Address : 156.147.69.181 => - NET_TIPADDR Address : 192.168.0.1 => (<- 추가된 사항, Tftp 서버 주소입력) - NET_IPADDR Address : 192.168.0.10 => - NET_NETMASK Address : 255.255.255.0 => - NET_GATEWAY Address : 192.168.0.1 => >nand erase mtdinfo
mtd talble 을 다운로드 하기 위해서 파일을 생성해야 한다. 'gp2/src' 아래에서 'make depmtdinfo' 로 컴파일하면, 'mtdinfo.pak' 파일이 생성된다.
이를 다음과 같이 다운로드 한다.
>sto tftp://192.168.0.1/mtdinfo.pak >swu pak-dvb_bb_bcm3556/model_RevNo8072_flash.epk
이후 .epk 파일을 다운로드 하면 된다.
부팅 중에 rootfs 파티션을 찾지 못해 커널 패닉이 발생할 때
이 문제에 대한 원인을 찾아내는 데 애를 먹었다. 언제나 그렇듯 생각해보면, 정말 아무것도 아닌 문제인 데 말이다.
어쨌든 이와 비슷한 문제를 겪는 다면 반드시 한번 시도해보자!
나의 경우는 중계서버의 문제였다. 이럴 경우, 중계서버의 모든 파일과 SVN 서버에서 중계서버로 마운트 되는 곳의 모든파일을 삭제한다. 그리고 다시 컴파일 한다.
$cd /tftpboot/bcm35xx/wjkim $rm -rf * $cd /share/global_platform/bcm35xx/wjkim $rm -rf *
이후 중계서버(156.147.69.181)의 모든 파일을 삭제한다.
다시 컴파일하고, 실행해보자!
특정 파일을 파일시스템에 넣고 싶을 때
Saturn7 에서 비교적 간단했다. 하지만, BCM 플랫폼으로 넘어오면서 방법이 좀 더 번거로워 졌다.
여기서는 Wi-Fi 드라이버를 검증할 때 필요한 몇가지 파일들을 예로들어 설명하겠다. 'wlmips, ibss_status, lgm_wps' 가 그것이다.
'gp2/src/app/platform/bcm35xx' 아래의 'build.mk' 파일을 아래와 같이 수정한다.
... L.71 COPY_SCRIPTS += $(call cond_assign, YES, INCLUDE_NM, NetworkManager,) COPY_SCRIPTS += $(call cond_assign, YES, INCLUDE_NM, wlmips,) COPY_SCRIPTS += $(call cond_assign, YES, INCLUDE_NM, lgm_wps,) COPY_SCRIPTS += $(call cond_assign, YES, INCLUDE_NM, ibss_status,) ... ... L.359 ifeq ($(INCLUDE_NM), YES) @$(CD) $(TEMP_DIR)/lgapp && $(CP) -v $(OUT_DIR)/NetworkManager $(TEMP_DIR)/lgapp @$(CD) $(TEMP_DIR)/lgapp && $(CP) -v $(OUT_DIR)/wlmips $(TEMP_DIR)/lgapp @$(CD) $(TEMP_DIR)/lgapp && $(CP) -v $(OUT_DIR)/lgm_wps $(TEMP_DIR)/lgapp @$(CD) $(TEMP_DIR)/lgapp && $(CP) -v $(OUT_DIR)/ibss_status $(TEMP_DIR)/lgapp ...
이후, Wi-Fi 드라이버 컴파일 후에 생성되는 파일을 'gp2/src/app/platform/bcm35xx' 아래에 복사한다. 이것으로 끝이 아니다. 추가한 파일들이 용량이 크기 때문에 해당 파티션의 크기를 늘려주어야 한다.
'gp2/src/apps/prj/atsc_bb_bcm3549/mtdinfo' 아래의 'mtdinfo.h' 파일을 아래와 같이 수정한다.
... L.183 #define DEFAULT_LGAPP_1_SIZE (0x1A00000) ...
컴파일하여, 새로운 'MTD.INFO' 파일을 만든다. 보드에 올릴때는 .epk 파일을 쓰기전에, mtd 정보를 업데이트 해준다.
> load mtdinfo > swu ee.epk
중계서버에서 파일 복사 에러시
epk 파일 빌드 시, 마지막에 중계서버로 바이너리 파일들을 복사하는데, 이 때 에러가 발생하여 파일서버에 제대로 복사되지 않는 경우가 있다. 이럴 때는 아래와 같이 실행한다.
$/prod/bin/prodsync /tftpboot/saturn7/자신의ID # Mstar Platform $/prod/bin/prodsync /tftpboot/bcm35xx/자신의ID # BCM Platform
Debug 메뉴에서 Shell 진입이 안될때
model 디렉토리 아래의 .cfg 파일을 열어 아래 항목을 수정한다.
... eEventBoardType = BOARD_PQ_1ST # PQ 로 수정 ...
컴파일 후, 부팅하여 확인해보자!