====== 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}}
----