'전체'에 해당되는 글 148건
- 2011.11.23 FTA 찬성표 던진 분들
- 2011.11.19 생존왕 1
- 2011.11.18 [GCC] -S 옵션?
- 2011.11.17 [kernel] module_init(), module_exit()
- 2011.11.09 야 사장새끼 오늘 안 나올것 같다.
- 2011.11.08 [kernel] obj-y ? obj-m ? obj-$(CONFIG_TEST) ? 1
- 2011.11.08 [kernel] 개발한 함수를 외부에 공개하는 법 1
- 2011.11.08 DC 인사이드의 명언 목록
- 2011.11.07 [kernel] 커널에 새로운 작업 디렉토리를 추가하고 싶다면
- 2011.11.06 등산냥이
타이타닉 보았을때 기관장 모습은 정말 인상적이었습니다.
침몰하는 배의 제일 밑바닥에서 마지막까지 배를 살리기 위해 노력하는...
그런데 몰랐었습니다.
그분이 생존왕이었을지는..
출처 : 자게
침몰하는 배의 제일 밑바닥에서 마지막까지 배를 살리기 위해 노력하는...
그런데 몰랐었습니다.
그분이 생존왕이었을지는..
출처 : 자게
'재밌는거' 카테고리의 다른 글
내 손이 도구냐? (0) | 2011.11.26 |
---|---|
냥이들 (0) | 2011.11.26 |
야 사장새끼 오늘 안 나올것 같다. (0) | 2011.11.09 |
DC 인사이드의 명언 목록 (0) | 2011.11.08 |
등산냥이 (0) | 2011.11.06 |
아래와 같은 코드를 작성하였습니다.
test.c
이 코드를 어셈블리 코드로 보고 싶다면?
-S 옵션을 붙여 주면 됩니다.
그럼 아래와 같이 어셈블리 코드로 볼 수 있습니다.
참고로 전 어셈코드를 못 봅니다. 능력이 안됩니다.
test.c
{ printf("%d\n", i); return 0; } int main(int argc, char *argv[]) { int i; for(i=0;i<10;i++){ test(i); } return 0; } |
이 코드를 어셈블리 코드로 보고 싶다면?
-S 옵션을 붙여 주면 됩니다.
그럼 아래와 같이 어셈블리 코드로 볼 수 있습니다.
.file "test.c" .section .rodata .LC0: .string "%d\n" .text .globl test .type test, @function test: .LFB0: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 subl $24, %esp movl $.LC0, %eax movl 8(%ebp), %edx movl %edx, 4(%esp) movl %eax, (%esp) call printf movl $0, %eax leave .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc .LFE0: .size test, .-test .globl main .type main, @function main: .LFB1: .cfi_startproc pushl %ebp .cfi_def_cfa_offset 8 .cfi_offset 5, -8 movl %esp, %ebp .cfi_def_cfa_register 5 andl $-16, %esp subl $32, %esp movl $0, 28(%esp) jmp .L3 .L4: movl 28(%esp), %eax movl %eax, (%esp) call test addl $1, 28(%esp) .L3: cmpl $9, 28(%esp) jle .L4 movl $0, %eax leave .cfi_restore 5 .cfi_def_cfa 4, 4 ret .cfi_endproc .LFE1: .size main, .-main .ident "GCC: (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1" .section .note.GNU-stack,"",@progbits |
참고로 전 어셈코드를 못 봅니다. 능력이 안됩니다.
'development' 카테고리의 다른 글
[etc] 빌드 시스템 (0) | 2011.12.23 |
---|---|
[kernel] Thread 와 Kill (0) | 2011.11.26 |
[kernel] module_init(), module_exit() (0) | 2011.11.17 |
[kernel] obj-y ? obj-m ? obj-$(CONFIG_TEST) ? (1) | 2011.11.08 |
[kernel] 개발한 함수를 외부에 공개하는 법 (1) | 2011.11.08 |
아래와 같이 구현하면 어떻게 될까요?
Makefile
MODULE=multi_init all: $(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules clean: rm -rf *.o *.ko *mod.c .*cmd .*versions Module.symvers modules.order
|
check_money.c
#include <linux/init.h> int check_money_init(void) { printk(KERN_ALERT "%s() : called\n", __FUNCTION__); return 0; } void check_money_exit(void) { printk(KERN_ALERT "%s() : bye\n", __FUNCTION__); } module_init(check_money_init); module_exit(check_money_exit); MODULE_LICENSE("Dual BSD/GPL"); |
get_money.c
#include <linux/init.h> int get_money_init(void) { printk(KERN_ALERT "%s() : called\n", __FUNCTION__); return 0; } void get_money_exit(void) { printk(KERN_ALERT "%s() : bye\n", __FUNCTION__); } module_init(get_money_init); module_exit(get_money_exit); MODULE_LICENSE("Dual BSD/GPL"); |
put_money.c
#include <linux/init.h> int put_money_init(void) { printk(KERN_ALERT "%s() : called\n", __FUNCTION__); return 0; } void put_money_exit(void) { printk(KERN_ALERT "%s() : bye\n", __FUNCTION__); } module_init(put_money_init); module_exit(put_money_exit); MODULE_LICENSE("Dual BSD/GPL"); |
컴파일 하면 에러 납니다.
module_init(), module_exit() 는 한 모듈당 하나씩만 사용 가능합니다.
가끔씩 이거 물어 보시는 분들이 있어서 정리해 놓았습니다.
'development' 카테고리의 다른 글
[kernel] Thread 와 Kill (0) | 2011.11.26 |
---|---|
[GCC] -S 옵션? (0) | 2011.11.18 |
[kernel] obj-y ? obj-m ? obj-$(CONFIG_TEST) ? (1) | 2011.11.08 |
[kernel] 개발한 함수를 외부에 공개하는 법 (1) | 2011.11.08 |
[kernel] 커널에 새로운 작업 디렉토리를 추가하고 싶다면 (0) | 2011.11.07 |
출처 : 자게
Makefile 을 살펴보면
obj-y := audio_device.o
혹은
obj-m := audio_device.o
혹은
obj-$(CONFIG_TEST) := audio_device.o
와 같은 형태를 볼 수 있다.
무슨 차이가 있을까?
커널소스 트리에 있는 각종 드라이버들은 모듈로 컴파일 될 수도 있고 커널 이미지에 바로 들어갈 수 도 있다.
obj-$(CONFIG_TEST) := audio_device.o
위와 같이 정의하면 make menuconfig 결과에 따라 모듈이나 빌트인으로 알아서 컴파일 된다.
은
그럼 빌트인으로 컴파일하라는 명령은?
obj-y := audio_device.o
이고
모듈로 컴파일 하라는 명령은?
obj-m := audio_device.o
이다.
간혹 보면 아래와 같이 구성되는 경우도 있다.
이런 무슨 뜻일까? 색을 칠해 보았다.
풀어서 설명하면,
audio_driver.c 와 i2s.c 를 컴파일한 후 하나로 묶어서
target.o 를 만들것이고
target.o 는 빌트인으로 커널 이미지로 들어가게 된다는 뜻이다.
그럼 이것은?
다 똑같은데 모듈로 만들겠다는 것만 다르다.
그럼 이것은?
menuconfig 결과에 따라 모듈로 컴파일 될 수도, 빌트인으로 컴파일 될 수도 있다는 뜻이다.
끝.
obj-y := audio_device.o
혹은
obj-m := audio_device.o
혹은
obj-$(CONFIG_TEST) := audio_device.o
와 같은 형태를 볼 수 있다.
무슨 차이가 있을까?
커널소스 트리에 있는 각종 드라이버들은 모듈로 컴파일 될 수도 있고 커널 이미지에 바로 들어갈 수 도 있다.
obj-$(CONFIG_TEST) := audio_device.o
위와 같이 정의하면 make menuconfig 결과에 따라 모듈이나 빌트인으로 알아서 컴파일 된다.
은
그럼 빌트인으로 컴파일하라는 명령은?
obj-y := audio_device.o
이고
모듈로 컴파일 하라는 명령은?
obj-m := audio_device.o
이다.
간혹 보면 아래와 같이 구성되는 경우도 있다.
obj-y := target.o target-objs += audio_driver.o target-objs += i2s.o |
이런 무슨 뜻일까? 색을 칠해 보았다.
obj-y := target.o target-objs += audio_driver.o target-objs += i2s.o |
풀어서 설명하면,
audio_driver.c 와 i2s.c 를 컴파일한 후 하나로 묶어서
target.o 를 만들것이고
target.o 는 빌트인으로 커널 이미지로 들어가게 된다는 뜻이다.
그럼 이것은?
obj-m := target.o target-objs += audio_driver.o target-objs += i2s.o |
다 똑같은데 모듈로 만들겠다는 것만 다르다.
그럼 이것은?
obj-$(CONFIG_TEST) := target.o $(CONFIG_TEST)-objs += audio_driver.o $(CONFIG_TEST)-objs += i2s.o |
menuconfig 결과에 따라 모듈로 컴파일 될 수도, 빌트인으로 컴파일 될 수도 있다는 뜻이다.
끝.
'development' 카테고리의 다른 글
[GCC] -S 옵션? (0) | 2011.11.18 |
---|---|
[kernel] module_init(), module_exit() (0) | 2011.11.17 |
[kernel] 개발한 함수를 외부에 공개하는 법 (1) | 2011.11.08 |
[kernel] 커널에 새로운 작업 디렉토리를 추가하고 싶다면 (0) | 2011.11.07 |
[program] memmove (0) | 2011.10.27 |
소스 구조가 아래와 같습니다.
timer/timer.c
dummy/dummy.c
아래와 같이 구현하면 정상적으로 동작할까요?
timer/timer.c
dummy/dummy.c
정답은 실패한다 입니다.
리눅스 커널에서는 외부에 공개할 함수는 EXPORT_SYMBOL 이라는 매크로를 사용하여 지정해 주어야 합니다.
위 소스들은 아래와 같이 수정하면 정상 동작합니다.
timer/timer.c
dummy/dummy.c
참고로 static 함수는 EXPORT_SYMBOL 매크로를 사용해도 외부에서 접근할 수 없습니다. 왜냐면 static 이기 때문입니다.
timer/timer.c
dummy/dummy.c
아래와 같이 구현하면 정상적으로 동작할까요?
timer/timer.c
#include <linux/init.h> int timer(void) { printk(KERN_ALERT "%s()\n", __FUNCTION__); } |
dummy/dummy.c
#include <linux/init.h> #include "timer/timer.h" int dummy(void) { timer(); } |
정답은 실패한다 입니다.
리눅스 커널에서는 외부에 공개할 함수는 EXPORT_SYMBOL 이라는 매크로를 사용하여 지정해 주어야 합니다.
위 소스들은 아래와 같이 수정하면 정상 동작합니다.
timer/timer.c
#include <linux/init.h> int timer(void) { printk(KERN_ALERT "%s()\n", __FUNCTION__); } EXPORT_SYMBOL(timer); |
dummy/dummy.c
#include <linux/init.h> #include "timer/timer.h" int dummy(void) { timer(); } |
참고로 static 함수는 EXPORT_SYMBOL 매크로를 사용해도 외부에서 접근할 수 없습니다. 왜냐면 static 이기 때문입니다.
'development' 카테고리의 다른 글
[kernel] module_init(), module_exit() (0) | 2011.11.17 |
---|---|
[kernel] obj-y ? obj-m ? obj-$(CONFIG_TEST) ? (1) | 2011.11.08 |
[kernel] 커널에 새로운 작업 디렉토리를 추가하고 싶다면 (0) | 2011.11.07 |
[program] memmove (0) | 2011.10.27 |
[kernel] struct list_head (0) | 2011.10.26 |
'고통이 없으면 성취도 없다. 근데 고통이 있다고 해서 성취도 있는 것은 아니다.'
'남들이 알아주지 않더라도 너의 일을 묵묵히 하다보면, 결국 남 좋은 일만 하게 된다.'
'너에게 닥친 고난이 아무리 커보이더라도, 명심해라, 아직 빙산의 일각일 뿐이다.'
'위험을 감수하지 않으면, 실패도 하지 않는다.'
'야망을 가지고 먼 여행을 하다보면, 완전히 x 되는 경우가 있다.'
'Never underestimate the power of stupid people in large groups'
(큰 집단에 있어서 어리석은 사람들의 힘을 절대 과소평가 하지마라.)
'승자 한 명당 패자는 열 명인데, 솔직히 너는 후자쪽일 것이다 '
'국가가 너에게 무엇을 해 주었는가를 생각하기 전에 니가 국가에 무엇을 해 줄 수 있는가를 생각하라.
어차피 국가는 너에게 무엇도 해주지 않을 것이다'
'열심히 일하다보면 언젠가 보상을 받기도 한다. 하지만 게으름을 피우면 당장 확실한 보상을 받는다. '
'외면이 아름다우면 내면 따위는 아무래도 좋다. '
'일찍 일어나는 벌레가 새한테 잡아먹힌다.'
'일이 잘 안되어갈 때 포기하지 않으면, 흉해 보인다.'
'남들이 널 필요로 한다고 해서, 그게 니가 중요한 사람이라는 뜻은 아니다.'
'뛰는 놈 위에 나는 놈 있다, 그리고, 나는 놈 위에 등 붙어 가는 놈도 있다.'
'성공한 사람은 디시를 할 수 있어도 디시를 하는 사람은 성공할 수 없다'
'여자는 별처럼 많다. 하지만 별처럼 먼 존재다'
'디씨질과 담배는 끊는것이 아니다. 영원히 참는것이다'
.
.
.
.
.
.
"우리 서로의 의견을 존중하도록 하자. 물론 내가 맞고 니가 틀리지만"
커널에 새로운 작업 디렉토리를 추가하고 싶을 경우가 있습니다.
만약 arm 시스템이고,
추가하고 싶은 디렉토리가
이라면,
Step 1. 디렉토리 생성 및 Kconfig, Makefile 생성
을 만든후에
Step 2. 생성한 디렉토리 정보 등록
파일에
라고 한 줄 추가해 주고
ᅟStep 3. kernel/Makefile 수정
kernel/Makefile 은 워낙 내용이 많아서 수정해야 할 부분만 발췌해서 정리하였습니다. 제대로 사용하려면 직접 Makefile 을 보면서 수정해야 합니다.
만약 arm 시스템이고,
추가하고 싶은 디렉토리가
kernel/RTSP |
이라면,
Step 1. 디렉토리 생성 및 Kconfig, Makefile 생성
mkdir kernel/RTSP kernel/RTSP/Kconfig kernel/RTSP/Makefile |
을 만든후에
Step 2. 생성한 디렉토리 정보 등록
kernel/arm/Kconfig |
파일에
source RTSP/Kconfig |
라고 한 줄 추가해 주고
ᅟStep 3. kernel/Makefile 수정
# Objects we will link into vmlinux / subdirs we need to visit RTSP-y := RTSP/ vimlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \ $(core-y) $(core-m) $(drivers-y) $(drivers-m)\ $(net-y $(net-m) $(libs-y) $(libs-m) $(RTSP-y) $(RTSP-m))) vmlinux-alldirs := $(sort $(vmlinux-dirs) $(patsubst %/,%,$(filter %/, \ $(init-n) $(init-) \ $(core-n) $(core-) $(drivers-n) $(drivers-)\ $(net-n) $(net-) $(libs-n) $(libs-) $(RTSP-n)))) RTSP-y := $(patsubst %/, %/built-in.o, $(RTSP-y)) vmlinux-main := $(core-y) $(libs-y) $(drivers-y) $(net-y) $(RTSP-y) |
kernel/Makefile 은 워낙 내용이 많아서 수정해야 할 부분만 발췌해서 정리하였습니다. 제대로 사용하려면 직접 Makefile 을 보면서 수정해야 합니다.
'development' 카테고리의 다른 글
[kernel] obj-y ? obj-m ? obj-$(CONFIG_TEST) ? (1) | 2011.11.08 |
---|---|
[kernel] 개발한 함수를 외부에 공개하는 법 (1) | 2011.11.08 |
[program] memmove (0) | 2011.10.27 |
[kernel] struct list_head (0) | 2011.10.26 |
[program] scandir() (0) | 2011.10.26 |
'재밌는거' 카테고리의 다른 글
야 사장새끼 오늘 안 나올것 같다. (0) | 2011.11.09 |
---|---|
DC 인사이드의 명언 목록 (0) | 2011.11.08 |
기회주의견 (0) | 2011.10.26 |
추성훈의 무리수 (0) | 2011.10.23 |
공대생의 정모 사진 (0) | 2011.10.15 |