S3C2440
From Doowon Kim
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
- tslib 설치하기
-
http://tslib.berlios.de/ 에서 tslib 1.0를 다운받는다.svn으로 최신 버전을 받는다. 이전 버전 사용시 pthres 모듈이 로딩이 안된다. - #./autogen.sh 실행
-
#./configure prefix=/usr/local/arm_tslib --host=arm-linux CC=arm-linux-gc - ./configure --enable-input --enable-debug --enable-shared --prefix=/usr/arm_directfb --host=arm-linux CC=arm-linux-gcc
-
config.h 수정 -> #define malloc rpl_malloc 라인 주석svn으로 최신 버전 받게 되면 config.h파일 수정할 필요 없음 - #make
- #make install
- 설치된 (위에서 prefix 한)폴더안의 파일들을 보드 /usr/local/arm_tslib에 복사한다.
- #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시 값이 저장되는 파일)
- 재부팅을 한다.
- /usr/local/arm_tslib/etc/ts.conf 파일을 열어서 module_raw input 의 주석을 제거한다.
- bin/ts_calibrate 를 실행시켜 좌표를 지정한다. 좌표값은 환경변수 설정시 지정한 파일에 저장이 된다.
DirectFB
compile
- zlib
- #wget http://puzzle.dl.sourceforge.net/sourceforge/libpng/zlib-1.2.3.tar.bz2
- #vi Makefile 아래 부분만 수정한다.
CC = arm-linux-gcc AR = arm-linux-ar rc RANLIB = arm-linux-ranlib prefix = /usr/arm_directfb
- make
- make install
- libpng
- libpng-1.2.42.tar.bz2 를 다운받는다
- 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
- make; make install
- libjpeg
- jpegsrc.v7.tar.gz 를 다운받는다
- 쉘 스크립트 파일을 아래와 같이 만든 후 실행한다. 그리고 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
- freetype-2.3.12.tar.gz 를 다운받는다
- 쉘 스크립트 파일을 아래와 같이 만든 후 실행한다. 그리고 make ; make install 한다.
#!/bin/bash PREFIX=/usr/arm_directfb HOST=arm-linux ./configure --prefix=$PREFIX --host=$HOST CC=arm-linux-gcc
- DirectFB
- DirectFB-1.4.3.tar.gz 를 다운받는다
- 아래와 같은 쉘 스크립트를 만든 후 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
- DirectFB-examples-1.2.0.tar.gz를 다운받는다
- 아래와 같은 쉘 스크립트를 만든 후 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 추가
보드에 올리기
- prefix 했던 /usr/arm_directfb 에 바이너리, 라이브러리등 다 설치가 되었다.
- /usr/arm_directfb 폴더 안을 다 tar를 묶은 후, 보드에 똑같이 /usr/arm_directfb를 복사 넣은 후, tar를 푼다.
- /etc/profile에서 LD_LIBRARY_PATH에 /usr/arm_directfb를 추가한다.
- /usr/arm_directfb/bin 안에 df_dok를 실행한다.
fbset
- #wget wget http://users.telenet.be/geertu/Linux/fbdev/fbset-2.1.tar.gz
- Makefile 수정 -> CC = arm-linux-gcc 옵션은 그대로 나눈다
- make
- 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
