====== Saturn7 에서 Broadcom Dongle 사용하기 ====== 2009년 9월 17일을 기준으로 가장 안정적으로 동작하는 4323 드라이버를 Saturn7 에서 동작가능하도록 하는 방법을 기술하고 있다. 이 문서는 작성하는 이유는 여러가지가 있겠지만, 가장 큰 이유는 Saturn7 플랫폼으로 개발하던 도중 Drop 이 되었기 때문이다. 나중에 Satrun7 플랫폼을 다시 사용하게 된다면, 훗날 이 문서가 많은 도움이 될 것이다. ====== 준비운동 하기 ====== 내가 사용한 GP2 버전은 리비전 r6131 이다. 이를 SVN 서버로 부터 가져오기 위해서는 다음과 같이 명령한다. $svn co http://156.147.69.210/gp2/trunk ./ -r6131 참고로 타겟보드는 ATSC 북미향 High 보드를 가지고 진행했다. 4323 드라이버는 {{ :computer:job:lg:5_14_21_14_srcmedia.tar.gz |}} 를 사용했다. ====== 부트로더 수정하기 ====== /gp2/os/saturn7_linux/boot/boot_1st/src 아래의 'boot_t3.inc' 파일을 아래과 같이 수정한다. MEMCLK = 1300 CPU_CLOCK = 504 ... WRITE_BUFFER_TIMEOUT = 0x0080 ... 이후 컴파일하여, 'u-boot-spi.bin, u-boot-nand.bin' 를 다시 write 한다. ====== 커널 수정하기 ====== /gp2/os/saturn7_linux/kernel/linux-2.6.26-saturn7/arch/mips/mips-boards/titania3 아래의 'chip_setup.c' 파일을 아래와 같이 수정한다. ... void Chip_Flush_Memory(void) { static unsigned char u8_4Lines[128]; unsigned char *pu8; volatile unsigned char *tmp; pu8 = ((unsigned char *)(((unsigned int)u8_4Lines) | 0xa0000000)); tmp = pu8; pu8[0] = pu8[16] = pu8[32] = pu8[48] = 1; mb(); pu8[64+0] = pu8[64+16] = pu8[64+32] = pu8[64+48] = 1; mb(); *tmp = pu8[64+48]; } 또한 /gp2/os/saturn7_linux/kernel/linux-2.6.26-saturn7/drivers/serial 아래의 '8250.c' 파일을 아래와 같이 수정한다. static int serial_link_irq_chain(struct uart_8250_port *up) { ... ret = request_irq(up->port.irq, serial8250_interrupt, irq_flags, "serial", i); *((volatile unsigned int*)0xbf203184) = 0x8; // 추가 *((volatile unsigned int*)0xbf203188) = 0x8; // 추가 if(ret < 0) ... } ====== 드라이버 수정하기 ====== 적당한 위치에 압축을 풀고 다음의 파일들을 수정한다. ===== shared/dbus_usb_linux.c ===== ... //#if(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) // 수정 L.37 #if 0 // 추가 #define USB_ALLIC_URB() ... #define MAX_USB_TX_REQ 128 // 수정 L.114 ... //#if(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) // 수정 L.1471 #if 0 // 추가 ... //#if(LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) // 수정 L.1516 #if 0 // 추가 ===== shared/bcm_rpc_tp_dbus.c ===== ... #define MAX_RPC_BUFS 128 // 수정 ... ===== wl/sys/wl_linux.c ===== ... MODULE_LICENSE("GPL"); ... ===== wl/linux/Makefile ===== ... ifeq ($(KERNELGE30),1) ... IFLAGS += -I$(LINUXDIR)/arch/mips/include/asm/mach-mips ... else ... IFLAGS += -I$(LINUXDIR)/include/asm/mach-mips ... 모두 수정했으면, 다음과 같이 컴파일 한다. $make LINUXDIR=/vol/users/wjkim/work/gp2/os/saturn7_linux/kernel/linux-2.6.26-saturn7 nodebug-mipsel-apdef-stadef-embed STBLINUX=1 NVRAMSTBS=1 ---- {{indexmenu>:#1|skipns=/^(wiki|etc|diary|playground)$/ skipfile=/^(todays|about|guestbook)$/ nsort rsort}} ----