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 드라이버는 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)
...
}

드라이버 수정하기

적당한 위치에 압축을 풀고 다음의 파일들을 수정한다.

...
//#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                                                  // 추가
...
#define MAX_RPC_BUFS 128  // 수정
...
...
MODULE_LICENSE("GPL");
...
...
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


  • computer/job/lg/saturn7.txt
  • Last modified: 4 weeks ago
  • by likewind