본문 바로가기

Programming

linux kernel 버전별 변경사항 check linux kernel 이 버전별로 어떠한 기능이 적용되었는지 한눈에 볼 수 있는 웹 사이트 입니다. 이런게 꼭 필요했었는데, 역시 있었네요. http://kernelnewbies.org/Linux_2_6_29 뒤에 리눅스 버전을 써 주면 됩니다. 더보기
linux kernel 에서 i2c slave address 등록 위치 커널 버전 : 2.6.24.* 드라이버 코드들을 보다보면 다음과 같이 probe 함수에서 i2c_client 정보를 받아와서 사용하는 경우가 있다. static struct i2c_driver P_i2c_driver = { .driver = { .name = "P_driver", }, .probe = P_probe, ... }; static int P_probe (struct i2c_client *client) { ... if( strcmp(client->name, PROX_DEVICE_NAME) != 0 ) ... else if( (ret = P_dev_init(client)) < 0 ) ... P_dev.client = client; } 이러한 경우에 어느 곳에서 이것을 등록시켜 주어야 할지 난감한 .. 더보기
struct 변수 사용 bit 한계 설정하기 다음과 같이 사용이 가능하다. struct i2c_gpio_platform_data { unsigned int sda_pin; unsigned int scl_pin; int udelay; int timeout; unsigned int sda_is_open_drain:1; unsigned int scl_is_open_drain:1; unsigned int scl_is_output_only:1; }; 이것의 의미는 해당 변수에서 오로지 N bit 만 사용하겠다는 의미 이다. 즉, 변수 사용상의 명확성을 준 것이다. 그리고 선언시에만 가능하다. 간단히 Test code 를 보자. // 각각 1, 2 ,3 bit 만 사용하도록 set struct AAA{ unsigned int a:1; unsigned int .. 더보기
좋은 음질의 동영상 벨소리 만들기 - 헵틱 아몰레드 개인적으로 좋아하는 곡이 있어서 동영상 벨을 만들어 보았습니다. 네이버에서 검색된 몇몇 방식을 사용해 보았는데 음질이 별로 좋지 않아서 여러 방법을 사용하다가 가장 좋은 설정을 찾아서 공유를 하려고 합니다. 음질을 좀 따지는 편이기 때문에 영상자체는 별로 신경을 쓰지 않았습니다. 참고로 저는 ktf 폰을 사용하였으나, 다른 통신사들도 동일하게 셋팅이 가능할 것입니다. 참고 하시는분들 댓글 한마디씩 부탁드립니다. ^^ 1. 음원 만들기 mp3파일을 적당한 구간으로 자릅니다. 골드 웨이브나 쿨에디트를 사용하시면 됩니다. 이미 인터넷에 방법이 많이 올라와 있으므로 이 부분은 다른 게시물을 참고하시기 바랍니다. 2. mp3파일 + 사진 으로 동영상 만들기 매직원 1.0 을 설치 합니다. 설치 파일은 동봉하였습니.. 더보기
Makefile 예제 자주 사용하는 Makefile 예제를 하나 올려둔다. 복사용~ CC = /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-gcc// 리눅스 머신에서 돌릴경우CC = /usr/bin/gcc CFLAGS = -Wall -lpthread -g -O0 -DLSI6410 CSRCS = ./key_test.c OBJS = $(CSRCS:.c=.o) .SUFFIXES:.c.o all: key_test cap_test: $(CC) $(CFLAGS) -o $@ $(CSRCS) clean: rm -f key_test $(OBJS) 더보기
[TIP] easy mistake casting buffer 사이즈가 다른 배열을 케스팅 하면 어떨게 될까? unsigned short (size 2 byte) 0x1234 0xabcd 0x00ff 0xff00 ==> casting char (size 1 byte) ? ? ? ? ? ? ? ? 쉽게 다음을 생각할 수 있을것입니다. 0x12 0x34 0xab 0xcd 0x00 0xff 0xff 0x00 하지만, 결과는 다르다는것.. byte ordering 의 차이가 있기 때문이지요. int i=0; unsigned short temp_data[4]={0x1234, 0xabcd, 0x00ff, 0xff00}; unsigned char* pConData = (unsigned char*)temp_data; unsigned char buf[2]; printk("[CAM].. 더보기
AtoH function 리눅스 커널에는 기본적인 함수들이 없다보니 구현해서 쓰게 된다 ;; static int ishex (char ch) { if (((ch>='0') && (ch ='a') && (ch ='A') && (ch = '0') && (ch = 'a') && (ch = 'A') && (ch 더보기
linux kernel 에서 file 유무 확인하기 여러 방법이 있겠지만, 다음 방법을 사용하였다. int check_exist_file(char* file_path) { int ret = 0; struct file *temp_file; temp_file = filp_open(file_path, O_RDONLY, 0); if (IS_ERR(temp_file)) ret = -1; else { filp_close(temp_file, NULL); ret = 0; } return ret; } 더보기
커널에서 파일 오퍼레이션 하기(File operation in Kernel) 원문 : http://blog.naver.com/netohk?Redirect=Log&logNo=80045492480 커널에서 파일 오퍼레이션 하기... (드라이버에서 펌웨어 로딩시 유용) #include #ifndef __KERNEL_SYSCALLS__ #define __KERNEL_SYSCALLS__ #endif #incude //#include function() { int fp; mm_segment_t fs; fs = get_fs(); set_fs(KERNEL_DS); open("file", O_RDONLY, 0); size = lseek(fd, 0, 2); //END lseek(fd, 0, 0); //START read(..); close(fp); set_fs(fs); } [출처] 커널에서 파일 .. 더보기
ARM side irq disable api linux../include/include/irqflags.h local_irq_disable() 더보기
Branch Prediction 비록 우리 과제에서는 disable 하기는 했지만, 이런기능도 있다는 것이 흥미롭다. 하지만, enable 했을경우 LCD에서 buffer under run 현상이 발견되어서 임베디드 과제에는 적용이 힘들지도 모르겠다.(혹은 ARM 계열에서만 발생하는 문제일 수 있다.) 원문 : http://minjang.egloos.com/503419 (2008년 6월 21일에 수정) 대부분의 고성능 CPU들은 거의 모두 Out-of-Order Execution이라고 불리는 비순차 실행을 지원하고 있다. Out-of-Order(OOO)의 목적은 하나의 스레드 내에서 최대의 병렬성을 찾는 것이다. 당연한 이야기겠지만 프로그램 코드는 프로그래머가 의도한 대로 위에서 아래로 순차적으로 실행된다. 중간에 if, for, 함수.. 더보기
SecureCRT 에서 menuconfig 보기 SecureCRT 에서 menuconfig 가 깨져서 나올때 아래와 같이 셋팅하면 깔끔하게 나온다. [Terminal ->Emulation] Terminal : Xterm ANSI Color : "check" 더보기
frame buffer 이야기(8)(9) 원문 : http://kelp.or.kr/korweblog/stories.php?story=02/12/08/8598141 http://kelp.or.kr/korweblog/stories.php?story=02/12/10/6611366 글쓴이 : holelee (2002년 12월 08일 오후 08:56) 읽은수: 10,893 [ 임베디드강좌/이규명 ] == 시작하기에 앞서 이 글에 있는 모든 내용은 글쓴이가 가지고 있는 ATI mach 64(2MB) 그래픽 카드가 달려있고 RedHat 8.0이 설치된 PC(또는 Permedia2(8MB) 그래픽 카드가 달려 있는 RedHat 7.3이 설치된 PC)에서 제대로 동작하지만 이 글에 있는 모든 내용이 정확하다고 말씀 드릴 수 없습니다. 이 글에 있는 내용을 따라.. 더보기
frame buffer 이야기(6) (7) 원문 : http://kelp.or.kr/korweblog/stories.php?story=02/11/12/3234889 http://kelp.or.kr/korweblog/stories.php?story=02/11/23/8053717 글쓴이 : holelee (2002년 11월 12일 오후 06:27) 읽은수: 8,786 [ 임베디드강좌/이규명 ] == 시작하기에 앞서 이 글에 있는 모든 내용은 글쓴이가 가지고 있는 ATI mach 64(2MB) 그래픽 카드가 달려있고 RedHat 8.0이 설치된 PC(또는 Permedia2(8MB) 그래픽 카드가 달려 있는 RedHat 7.3이 설치된 PC)에서 제대로 동작하지만 이 글에 있는 모든 내용이 정확하다고 말씀 드릴 수 없습니다. 이 글에 있는 내용을 따라 .. 더보기
frame buffer 이야기(4) (5) 원문 : http://kelp.or.kr/korweblog/stories.php?story=02/11/11/1742716 http://kelp.or.kr/korweblog/stories.php?story=02/11/12/3096836 글쓴이 : holelee (2002년 11월 11일 오후 10:35) 읽은수: 17,354 [ 임베디드강좌/이규명 ] == 시작하기에 앞서 이 글에 있는 모든 내용은 글쓴이가 가지고 있는 ATI mach 64(2MB) 그래픽 카드가 달려있고 RedHat 8.0이 설치된 PC(또는 Permedia2(8MB) 그래픽 카드가 달려 있는 RedHat 7.3이 설치된 PC)에서 제대로 동작하지만 이 글에 있는 모든 내용이 정확하다고 말씀 드릴 수 없습니다. 이 글에 있는 내용을 따라.. 더보기
frame buffer 이야기 (3) 원문 : http://kelp.or.kr/korweblog/stories.php?story=02/11/11/4997781 글쓴이 : holelee (2002년 11월 11일 오후 05:56) 읽은수: 11,169 [ 임베디드강좌/이규명 ] == 시작하기에 앞서 이 글에 있는 모든 내용은 글쓴이가 가지고 있는 ATI mach 64(2MB) 그래픽 카드가 달려있고 RedHat 8.0이 설치된 PC(또는 Permedia2(8MB) 그래픽 카드가 달려 있는 RedHat 7.3이 설치된 PC)에서 제대로 동작하지만 이 글에 있는 모든 내용이 정확하다고 말씀 드릴 수 없습니다. 이 글에 있는 내용을 따라 했을 때 혹 생길 지 모르는 모든 문제에 대해서 글쓴이는 책임을 지지 않습니다. 글의 내용 중에 잘못된 내용이 .. 더보기
frame buffer 이야기 (2) 원문 : http://kelp.or.kr/korweblog/stories.php?story=02/11/09/8670820 글쓴이 : holelee (2002년 11월 09일 오후 10:31) 읽은수: 13,703 [ 임베디드강좌/이규명 ] == 시작하기에 앞서 이 글에 있는 모든 내용은 글쓴이가 가지고 있는 ATI mach 64(2MB) 그래픽 카드가 달려있고 RedHat 8.0이 설치된 PC(또는 Permedia2(8MB) 그래픽 카드가 달려 있는 RedHat 7.3이 설치된 PC)에서 제대로 동작하지만 이 글에 있는 모든 내용이 정확하다고 말씀 드릴 수 없습니다. 이 글에 있는 내용을 따라 했을 때 혹 생길 지 모르는 모든 문제에 대해서 글쓴이는 책임을 지지 않습니다. 글의 내용 중에 잘못된 내용이 .. 더보기
frame buffer 이야기 (1) 요즘 touch device 에 이어서 display module인 v4l2와 frame buffer 등의 업무를 담당하고 있다. 공부를 해 나아가며 찾은 자료들을 이곳에 keeping 하려 한다. 좋은 자료를 만들어 주신분께 먼저 감사를 드린다. 원문 : http://kelp.or.kr/korweblog/stories.php?story=02/11/09/8557035 글쓴이 : holelee (2002년 11월 09일 오후 10:29) 읽은수: 22,783 [ 임베디드강좌/이규명 ] == 시작하기에 앞서 이 글에 있는 모든 내용은 글쓴이가 가지고 있는 ATI mach 64(2MB) 그래픽 카드가 달려있고 RedHat 8.0이 설치된 PC(또는 Permedia2(8MB) 그래픽 카드가 달려 있는 RedHa.. 더보기
udev debuging 방법 udev 에서 파일 호출하는 녀석이 갑자기 동작이 안되어서 재대로 호출되는지 알고 싶었다. 구글링중 다음과 같이 setting 하면 로그를 볼 수 있다고 한다. 하지만 사실 원인은 파일 호출 권한 문제 였다능.. # udevd --daemon --debug-trace --verbose &>udevd-debug.log # udevcontrol log_priority=debug # udevcontrol env STARTUP=1 # udevmonitor --env 더보기
svn 명령어 모음 원본 : http://blog.naver.com/binoz?Redirect=Log&logNo=40039908311 저장소 만들기 svnadmin create [디렉토리명] Import svn import (-m) . [저장소경로] 체크아웃 svn checkout [저장소경로] [workspace] checkout = co Workspace 정보 svn info [workspace] 커밋 svn commit (-m) 갱신(update) svn update : 기본으로 하위 디렉토리 모두 갱신 [ A ] 저장소에 새로 추가된 파일을 Workspace로 받아옴 [ U ] 저장소에 새 버전이 체크인 되어 Workspace의 파일을 그 버전으로 갱신함 (Workspace 파일의 버전이 체크 아웃된 이후 변경되지 .. 더보기
시나리오 별 SVN 사용법 원본 : http://imcdream.net/221 [SVN 사용 준비] svn import : Repository에 version이 붙이 않은 사본을 올리는 것. 필요하다면 intermeidate directory를 만든다. Working Copy가 없어도 바로 commit 된다. 이미 존재하는 file/tree를 subversion repository에 tracking을 시작할 때 사용한다. 1 2 3 4 5 6 7 8 9 10 11 12 $ svnadmin create /var/svn/newrepos $ svn import mytree file:///var/svn/newrepos/some/project \ -m "Initial import" Adding mytree/foo.c Adding mytre.. 더보기
source insight 기능 Tip - 특정 폴더 안에 단어 검색하기 개발을 하다보면 특정 폴더 내에있는 파일안에 특정 단어를 가지고 검색을 해야할 일이 있다. 고급 툴인 source insight 는 이 기능을 지원하지만, 찾기가 쉽지 않다. ctrl+o 단축키를 눌러서 나오는 파일 창에서 아래 왼쪽에서 두번째인 파일 브라우져 창을 활성화 시킨다. 폴더가 트리형태로 보이고 원하는 폴더까지 들어가서 마우스 오른쪽 버튼을 누른다. search files 를 고르면 창이 하나 뜬다. List Line Text 를 check 하면 파일 내용중에서 search 를 해 준다. include suvdirectories 를 check 해주면 하위 디랙토리 까지 탐지해 준다. 더보기
Linux kernel compile 시 stdio.h / stdlib.h 애러 얼마전 커널에서 동작하는 간단한 프로그램을 만들었다. 컴파일 하는데..앵.. 왠걸.. 엄청난 애러가 났다. kernel/syscall_interpret/auditex_string.c:1:20: error: stdlib.h: No such file or directory 결론부터 말하면 kernel 에서는 stdlib 들을 사용할 수 없다. standard library 는 glibc 에 연동되어서 돌아가는데, kernel 에서는 이를 이용할 수 없기 때문이다. 따라서 kernel 쪽에서는 이를 대비한 간단한 lib들을 따로 재공 하고 있는데 그 위치는 컴파일 환경마다 다르겠지만 보통 다음과 같다. linux-버전명\lib 더보기
Linux Kernel 의 spin lock spin_lock 에 대해서 깔끔하게 정리해 놓았다. Lcd 에 control data 를 보내기 위해서 spin_lock_irqsave() 를 사용해 보았다. 보통은 저 함수가 인터럽트를 disable 해주기 때문에 인터럽트 핸들러에서 주로 사용된다고 한다. 그렇다면 disable 된 인터럽트들은 어떻게 되는 것일까? 누구 아는 사람?!! 원문 : http://blog.naver.com/ryswin?Redirect=Log&logNo=140043664262 * spin_lock_irqsave()와 spin_lock_irq() 둘다 interrupt를 disable 시킨 이후에 spin lock을 획득하는 것은 동일하지만, spin_lock_irqsave()는 CPU의 flag 레지스터를 보관했다가 spi.. 더보기
페도라 7 테마로 꾸미기 원문 : http://blog.naver.com/hwang_jt?Redirect=Log&logNo=130026193180 위젯의 설치는 리눅스 데스크탑을 보다 깔끔하고 아기자기하게 보이기 위해서 이다. 개인용 컴퓨터에서 GUI의 시작은 맥시스템에서 이다. 상황이 이렇다 보니 그래픽데스크탑에 있어 맥시스템의 그것은 누구나 한번쯤 흉내 내고 싶은 것들이다. fedora7에서는 gdesklets이라는 것을 설치하는 방법이 제일쉬운 선택이다. 타배포판의 경우는 screenlets http://screenlets.org을 사용하는 것으로 알고 있다. 좀 부족하지만 gdesklets을 설치하는 것은 싱거울 정도로 쉽다. 콘솔창에서 아래와 같이 실행해 준다. yum install gdesklets screenlets.. 더보기
kernel 에서 ntoa 사용하기 kernel 에 user 쪽에서 사용하던 코드를 포팅하다 난감한 상황이 발생했다. 바로 inet_ntoa 함수가 kernel 쪽에 없는것. 한시간 가량 구글링을 한끝에 해법을 찾았다. define 문은 kernel.h 파일에 있다. #ifndef __SAMSUNG_AUDIT_LOGGING_PARAM__ tprintf("inet_addr(\"%s\")", inet_ntoa(sinp->sin_addr)); #else tprintf("inet_addr(\"" NIPQUAD_FMT "\")", NIPQUAD(sinp->sin_addr)); #endif 더보기
[Linux][kernel] __user 키워드 kernel 코드를 보다보니 다음과 같이 생소한 키워드가 보였다. void __user *sival_ptr; 따라가 보니 다음과 같다.. 이것은 뭥미? ㅁ_ㅁ # define __user __attribute__((noderef, address_space(1))) 일단.. noderef 에 대해서 http://lkml.org/lkml/2004/9/12/230 의 글 타래를 읽어보니까, noderef는 no dereference라는 뜻이더군요. address_space에 대한 얘기는 없고... address_space는 뭐, 유저 스페이스 커널 스페이스등등 나눠놓고... 몇번째에 해당한다는 것 같은데요...(제 생각) 맞나요? 아시는 분? no dereference로 선언된 포인터 변수는 dereferen.. 더보기
nfs 로 fedora 설치할때 network 설정하기 fedora 7 DVD 를 꼬진 P30 노트북에서 인식하지 못한다. 결국 DVD reader 가 있는 다른 pc에서 mount 해서 nfs 서비스를 올렸다. 그후에 fedora 7 rescure cd 로 설치 매뉴에 들어가면 NFS 설치 메뉴가 있다. 여기서 NFS 서버를 잡아주면 자동으로 설치가 된다. 처음에는 아무리 셋팅을 바꾸어봐도 nfs 에 접속이 안되었다. 결국 다음과 같이 셋팅을 하여야 한다. IPv4 : 10.89.45.167 / 10.89.45 GW : 10.89.45.1 name server 10.32.192.11 결국 subnet mask 대신에 prefix 를 입력하는건데 ip주소와 동일하게 입력해서 계속 삽질을 했었던 것이다.;;; 더보기
Samba Server 셋팅하기 원문 : http://www.linux4u.co.kr/RedhatAS/s1-samba-configuring.html 1. Window 에서 접속할때 id 부분이 비활성화 되고 guest 로 고정되어 있어서 몇일을 삽질했다. 이것은 뒤에 나오겠지만 samba -> server settings -> sevurity 탭 -> authentication mode 를 use 로 해 놓아야 암호를 넣을 수 있다. 2. 그 이후에도 쓰기 권한을 주었는데도 불구하고 쓰기가 계속 안되었다. 이번 문제는 SELinux 설정이었다. 설치할때 분명 disable 로 해 놓고 설치해서 완전히 믿고 있었는데, 나중에 들어가 보니 그게 아니었다. > vi /etc/selinux/config 보면 SELINUX = disable 로.. 더보기
ARM ASM commond 해석 (LDMDB, LDMEA, STMDB, STMFD) 원문 : http://blog.naver.com/realdani?Redirect=Log&logNo=100007759984 asm 해석에 대한 내용은 볼때마다 까먹는다 ;;; 그나마 arm asm 은 간단해서 다행~ *********************************************************************** Decrement Before : 현제 가리키로 있는 곳에서 상위주소(0번지쪽으로) 가리킨후 실행(STMFD) LDMDB, LDMEA, STMDB, STMFD 는 모두 r13!,{r2-r3}였을 때 만약 r13에 !가 안붙으면 r13의 값은 변하지 않음 LD일 경우, 처음 r13이 #&14일때 마지막은 #&0C를 가리키고, r2에 Ox000000C번지의 word, r.. 더보기