S3C2440

From Doowon Kim

Jump to: navigation, search

Contents

sound


//dwkim -  SOUND_MIXER_WRITE_ALTPCM -> SOUND_MIXER_WRITE_SPEAKER 수정함
soundcard_set_volume( SOUND_MIXER_WRITE_SPEAKER, 100, 100);

USB wireless lan card

  • 커널 설정
    • Device Drivers > Networking device support > Wireless LAN (non-hamradio)
    • Check “Wireless LAN drivers(non-hamradio) & Wireless Extensions”
  • 소스 코드
    • 2009_0713_RT73_Linux_STA_Drv1.1.0.3.zip
  • 드라이버 makefile
#dule Name: Makefile
#       Abstract: Makefile for rt73 linux driver on kernel series 2.6 
######################################################################
CC:=arm-linux-gcc
LD:=arm-linux-ld


KERNDIR=/home/nfs/linux

KERNEL_SOURCES := $(KERNDIR)

MODULE_NAME := rt73

obj-m := rt73.o

$(MODULE_NAME)-objs :=  rtmp_main.o mlme.o connect.o rtusb_bulk.o rtusb_io.o \
                        sync.o assoc.o auth.o auth_rsp.o rtusb_data.o \
                        rtmp_init.o  sanity.o rtmp_wep.o rtmp_info.o \
                        rtmp_tkip.o wpa.o md5.o

ifdef TOPDIR
obj-m += $(MODULE_NAME).o
endif

EXTRA_CFLAGS += -I$(src)
EXTRA_CFLAGS += -DAGGREGATION_SUPPORT -DWMM_SUPPORT

src ?= .
obj ?= .

MODULE_OBJECT := $(MODULE_NAME).ko
MODULE_CONF := /etc/modprobe.conf

KBUILD_PARAMS := -C $(KERNEL_SOURCES) SUBDIRS=$(CURDIR) $(KERNEL_OUTPUT)

arm:
        @$(MAKE) $(KBUILD_PARAMS) 'EXTRA_CFLAGS=-mstructure-size-boundary=8 -I$(src)' modules;
        /usr/local/arm/oe/bin/arm-linux-strip -S rt73.ko
        cp -f rt73.ko /nfs/

clean:
        rm -rf *.o *~ .*.cmd *.ko *.mod.c .tmp_versions built-in.o


  • 고정아이피 설정
ifconfig rausb0 192.168.10.11 netmask 255.255.255.0 up  
route add default gw 192.168.10.1 dev rausb0 
iwconfig rausb0 essid DXR
  • wireless 설정 방법
ifconfig rausb0 up
iwlist scanning # 현재 접속 가능한 AP 확인
iwconfig rausb0 essid "essid 이름"
udhcpc -i rausb0 # 동적 ip 할당

LCD

  • 800 * 480 AT070TN83 7" TFT LCD 이용
  • LCD가 바뀔경우 수정해야 될 커널 소스
    • 소스경로 : 리눅스 커널 소스/drivers/video/s3c2410fb.c
    • http://forum.falinux.com/zbxe/?document_srl=505324 에서는 arch/arm/mach-s3c2440/falinux-lcd.h를 수정해야 된다고 나오지만 drivers/video/s3c2410fb.c 를 수정해야 된다.
    • 아래 소스 코드의 CLKVAL, VFPD 등은 http://blog.chinaunix.net/u2/70922/showart_2181470.html 여기 주소를 참조함.
    • 아래 소스 코드의 매크로 함수는 linux/include/asm-arm/arch-s3c2410/regs-lcd.h 에서 정의했다.
    • bpp를 18색으로 하면 LCD에 제대로 값이 나오지 않는다. 16으로 하면 잘나온다.
[2] = { /* 640X480 */
                .regs   = {
                        .lcdcon1 = S3C2410_LCDCON1_TFT16BPP | S3C2410_LCDCON1_TFT | S3C2410_LCDCON1_CLKVAL(0x01),
                        .lcdcon2 = S3C2410_LCDCON2_VBPD(29) | S3C2410_LCDCON2_LINEVAL(480-1) | S3C2410_LCDCON2_VFPD(13) | S3C2410_LCDCON2_VSPW(3),
                        .lcdcon3 = S3C2410_LCDCON3_HBPD(40) | S3C2410_LCDCON3_HOZVAL (800-1) | S3C2410_LCDCON3_HFPD(40),
                        .lcdcon4 = S3C2410_LCDCON4_MVAL(13)  | S3C2410_LCDCON4_HSPW(48),
//                      .lcdcon5 = S3C2410_LCDCON5_FRM565   | S3C2410_LCDCON5_INVVLINE | S3C2410_LCDCON5_INVVFRAME | S3C2410_LCDCON5_PWREN | S3C2410_LCDCON5_HWSWP,
                        .lcdcon5 = (1<<11)|(0<<9)|(0<<8)|(0<<6)|(0<<1)|1,
                },

                /* currently setup by downloader */
                .gpccon         = 0xaaaa56a9,
                .gpccon_mask    = 0xffffffff,
                .gpcup          = 0x0000ffff,
                .gpcup_mask     = 0xffffffff,
                .gpdcon         = 0xaaaaaaaa,
                .gpdcon_mask    = 0xffffffff,
                .gpdup          = 0x0000ffff,
                .gpdup_mask     = 0xffffffff,

                .lpcsel         = 0xF84,
                .type           = S3C2410_LCDCON1_TFT,

                .width  = 800,
                .height = 480,

                .xres       = {
                        .min    = 800,
                        .max    = 800,
                        .defval = 800,
                },

                .yres       = {
                        .min    = 480,
                        .max    = 480,
                        .defval = 480,
                },
                .bpp        = {
                        .min    = 16,
                        .max    = 16,
                        .defval = 16,
                },
        },


/**
http://blog.chinaunix.net/u2/70922/showart_2181470.html 참고함
**/
处理器: S3C2440A
LCD: AT070TN83 7" TFT (群创/富士康/foxconn/InnoLux) 分辨率(800*480)
 
#define MVAL  (13)
#define MVAL_USED  (0)  //0=each frame   1=rate by MVAL
#define INVVDEN  (1)  //0=normal       1=inverted
#define BSWP  (0)  //Byte swap control
#define HWSWP  (1)  //Half word swap control
#define M5D(n) ((n) & 0x1fffff) // To get lower 21bits
#define LCD_XSIZE_TFT (800) 
#define LCD_YSIZE_TFT (480)
#define SCR_XSIZE_TFT (LCD_XSIZE_TFT) //video buffer的宽, video buffer应该比lcd屏幕的点阵要多,屏幕显示可以移动
#define SCR_YSIZE_TFT (LCD_YSIZE_TFT) //video buffer的高
#define HOZVAL_TFT (LCD_XSIZE_TFT -1)
#define LINEVAL_TFT (LCD_YSIZE_TFT -1)
#define VBPD (29)  //垂直同步信号的后肩
#define VFPD (13)  //垂直同步信号的前肩
#define VSPW (3)  //垂直同步信号的脉宽
#define HBPD (40)  //水平同步信号的后肩
#define HFPD (40)  //水平同步信号的前肩
#define HSPW (48)  //水平同步信号的脉宽
#define CLKVAL_TFT (1)  //LCD手册要求时钟频率(Max:50Mhz, Typ:33.3Mhz), 2440A工作在FCLK=400,HCLK=133情况下,CLKVAL_TFT >= 1
volatile unsigned short LCD_BUFER[SCR_YSIZE_TFT][SCR_XSIZE_TFT];
/**************************************************************
800×480 16Bpp TFT LCD数据和控制端口初始化
**************************************************************/
void Lcd_Port_Init(void)
{
    rGPCUP=0xffffffff; // Disable Pull-up register
    rGPCCON=0xaaaa56a9; //Initialize VD[7:0],LCDVF[2:0],VM,VFRAME,VLINE,VCLK,LEND
    rGPDUP=0xffffffff; // Disable Pull-up register
    rGPDCON=0xaaaaaaaa; //Initialize VD[15:8]
}
/**************************************************************
800×480 16Bpp TFT LCD功能模块初始化
**************************************************************/
void Lcd_Init(void)
{
 rLCDCON1=(CLKVAL_TFT<<8)|(MVAL_USED<<7)|(3<<5)|(12<<1)|0;     // TFT LCD panel,12bpp TFT,ENVID=off
 rLCDCON2=(VBPD<<24)|(LINEVAL_TFT<<14)|(VFPD<<6)|(VSPW);
 rLCDCON3=(HBPD<<19)|(HOZVAL_TFT<<8)|(HFPD);
 rLCDCON4=(MVAL<<8)|(HSPW);
 rLCDCON5=(1<<11)|(0<<9)|(0<<8)|(0<<6)|(BSWP<<1)|(HWSWP); //FRM5:6:5,HSYNC and VSYNC are inverted
 rLCDSADDR1=(((U32)LCD_BUFER>>22)<<21)|M5D((U32)LCD_BUFER>>1);
 rLCDSADDR2=M5D( ((U32)LCD_BUFER+(SCR_XSIZE_TFT*LCD_YSIZE_TFT*2))>>1 );
 rLCDSADDR3=(((SCR_XSIZE_TFT-LCD_XSIZE_TFT)/1)<<11)|(LCD_XSIZE_TFT/1); //virtual screen的x起点和显示宽度.
  rLCDINTMSK|=(3); // MASK LCD Sub Interrupt
 rTCONSEL&=(~7); // Disable LPC3600
 rTPAL=0; // Disable Temp Palette
}

touch

tslib

  1. http://tslib.berlios.de/ 에서 tslib 1.0를 다운받는다. svn으로 최신 버전을 받는다. 이전 버전 사용시 pthres 모듈이 로딩이 안된다.
  2. #./autogen.sh 실행
  3. #./configure prefix=/usr/local/arm_tslib --host=arm-linux CC=arm-linux-gc
  4. ./configure --enable-input --enable-debug --enable-shared --prefix=/usr/arm_directfb --host=arm-linux CC=arm-linux-gcc
  5. config.h 수정 -> #define malloc rpl_malloc 라인 주석 svn으로 최신 버전 받게 되면 config.h파일 수정할 필요 없음
  6. #make
  7. #make install
  8. 설치된 (위에서 prefix 한)폴더안의 파일들을 보드 /usr/local/arm_tslib에 복사한다.
  9. #vi /etc/profile 아래의 환경변수를 넣어준다.
export TSDIR=/usr/local/arm_tslib  (tslib가 설치된 디렉토리)
export LD_LIBRARY_PATH=$TSDIR/lib:$LD_LIBRARY_PATH  (라이브러리 패스)
export TSLIB_TSDEVICE=/dev/input/event2   (터치스크린 디바이스 파일)                        
export TSLIB_CONFFILE=/$TSDIR/etc/ts.conf  (tslib환경설정)
export TSLIB_CALIBFILE=/usr/local/arm_tslib/etc/pointercal  (calibration시 값이 저장되는 파일)  
  1. 재부팅을 한다.
  2. /usr/local/arm_tslib/etc/ts.conf 파일을 열어서 module_raw input 의 주석을 제거한다.
  3. bin/ts_calibrate 를 실행시켜 좌표를 지정한다. 좌표값은 환경변수 설정시 지정한 파일에 저장이 된다.

DirectFB

compile
  • zlib
  1. #wget http://puzzle.dl.sourceforge.net/sourceforge/libpng/zlib-1.2.3.tar.bz2
  2. #vi Makefile 아래 부분만 수정한다.
CC = arm-linux-gcc
AR = arm-linux-ar rc
RANLIB = arm-linux-ranlib
prefix = /usr/arm_directfb
  1. make
  2. make install
  • libpng
  1. libpng-1.2.42.tar.bz2 를 다운받는다
  2. CC=arm-linux-gcc NM=arm-linux-nm AR=arm-linux-ar RANLIB=arm-linux-ranlib STRIP=arm-linux-strip ./configure --host=arm-linux --build=i386-linux --prefix=/usr/arm_directfb
  3. make; make install
  • libjpeg
  1. jpegsrc.v7.tar.gz 를 다운받는다
  2. 쉘 스크립트 파일을 아래와 같이 만든 후 실행한다. 그리고 make ; make install 한다.
#!/bin/bash

PREFIX=/usr/arm_directfb
HOST=arm-linux

./configure --prefix=$PREFIX --host=$HOST --enable-shared \
CC=arm-linux-gcc STRIP=arm-linux-strip CFLAGS=`-Os -I/usr/arm_directfb/include`
  • freetype
  1. freetype-2.3.12.tar.gz 를 다운받는다
  2. 쉘 스크립트 파일을 아래와 같이 만든 후 실행한다. 그리고 make ; make install 한다.
#!/bin/bash

PREFIX=/usr/arm_directfb
HOST=arm-linux

./configure --prefix=$PREFIX --host=$HOST CC=arm-linux-gcc

  • DirectFB
  1. DirectFB-1.4.3.tar.gz 를 다운받는다
  2. 아래와 같은 쉘 스크립트를 만든 후 make; make install 한다.
#!/bin/bash

PREFIX=/usr/arm_directfb
HOST=arm-linux

./configure --prefix=$PREFIX --host=$HOST \
CC=arm-linux-gcc \
CFLAGS=-I$PREFIX/include LDFLAGS=-L$PREFIX/lib \
PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig \
--enable-static=yes --enable-shared=yes --enable-osx=no --enable-x11=no \
--enable-debug=no --enable-multi=no --enable-fbdev --enable-sdl=no \
--enable-jpeg=yes --enable-zlib=yes --enable-png=yes --enable-gif=yes \
--enable-freetype=yes --with-gfxdrivers=none --with-inputdrivers=linuxinput,tslib \
--with-tests
  • DirectFB example
  1. DirectFB-examples-1.2.0.tar.gz를 다운받는다
  2. 아래와 같은 쉘 스크립트를 만든 후 make; make install 한다.
#!/bin/bash

PREFIX=/usr/arm_directfb
HOST=arm-linux

./configure --prefix=$PREFIX --host=$HOST \
CC=arm-linux-gcc CFLAGS=-I$PREFIX/include LDFLAGS=-L$PREFIX/lib \
PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig

  • png 컴파일 오류시 -lm -lz 추가
보드에 올리기
  1. prefix 했던 /usr/arm_directfb 에 바이너리, 라이브러리등 다 설치가 되었다.
  2. /usr/arm_directfb 폴더 안을 다 tar를 묶은 후, 보드에 똑같이 /usr/arm_directfb를 복사 넣은 후, tar를 푼다.
  3. /etc/profile에서 LD_LIBRARY_PATH에 /usr/arm_directfb를 추가한다.
  4. /usr/arm_directfb/bin 안에 df_dok를 실행한다.
fbset
  1. #wget wget http://users.telenet.be/geertu/Linux/fbdev/fbset-2.1.tar.gz
  2. Makefile 수정 -> CC = arm-linux-gcc 옵션은 그대로 나눈다
  3. make
  4. fbset -i
mode "800x480"
    geometry 800 480 800 480 16
    timings 0 41 41 30 14 49 4
    rgba 5/11,6/5,5/0,0/0
endmode

Frame buffer device information:
    Name        : s3c2410fb
    Address     : 0x30600000
    Size        : 768000
    Type        : PACKED PIXELS
    Visual      : TRUECOLOR
    XPanStep    : 0
    YPanStep    : 0
    YWrapStep   : 0
    LineLength  : 1600
    Accelerator : No
Personal tools