1 / 9

Library 만들기

Library 만들기. 이성준 imggaibi@hotmail.com. 정적 library. Compile Gcc – c file_name 라이브러리로 만들고자 하는 파일을 실행이 불가능한 오브젝트 파일로 만든다 . 정적 라이브러리 생성 Ar crv lib&lib_name.a file_name.o 라이브러리로 데이터를 추가하기 위해 ar 을 사용한다 . 하나의 큰 파일 내에 포함되는 개별적인 자료들의 모음이나 집합체를 생성한다 . 라이브러리 목차 생성 Ranlib lib&lib_name.a

hova
Download Presentation

Library 만들기

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Library 만들기 이성준 imggaibi@hotmail.com

  2. 정적 library • Compile • Gcc –c file_name • 라이브러리로 만들고자 하는 파일을 실행이 불가능한 오브젝트 파일로 만든다. • 정적 라이브러리 생성 • Ar crv lib&lib_name.a file_name.o • 라이브러리로 데이터를 추가하기 위해 ar을 사용한다. • 하나의 큰 파일 내에 포함되는 개별적인 자료들의 모음이나 집합체를 생성한다. • 라이브러리 목차 생성 • Ranlib lib&lib_name.a • 라이브러리를 성공적으로 사용하기 위해 라이브러리 목차를 생성할 필요가 있다. • GNU 소프트웨어 개발 도구를 사용할 때는 이 과정을 생략하는 것이 가능하다. • 검사 • Gcc –o runable_name file_name.c L. llib_name • 라이브러리를 이용하기 위해 라이브러리의 위치와 이름을 명명하여 야 한다. • -L : 라이브러리의 위치 표기 • -l : 사용하려는 라이브러리 명 표기

  3. 동적 library • Rename • 만들고자 하는 파일의 이름을 lib&file_name.c로 변경 • Compile • Gcc –fPIC –Wall –g –c lib&file_name.c • Library 생성 • Gcc –g –shared –Wl , -soname,lib&file_name.so.0 –o lib&file_name.so.0.0 lib&file_name.o –lc • 링크 생성 • Ln –sf lib&file_name.so.0.0 lib&file_name.so.0 • 실제 사용할 링크 생성 • Ln –sf lib&file_name.so.0 lib&file_name.so • 검사 • Gcc –o runable_filename runable_filename.c –L. –lfile_name • 동작 안함 • 라이브러리 경로 추가 • LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(pwd) • Export LD_LIBRARY_PATH

  4. 시스템 콜 추가 (1) • 시스템 콜 추가를 위해 할일 • 커널 수정 • 시스템 콜 번호를 할당한다. • Linux2.4/include/asm/unistd.h • sys_call_table에 등록한다. • Linux2.4/arch/arm/kernel/calls.S • 추가할 시스템콜 코드를 작성 • Linux2.4/arch/arm/kernel/에 작성 • 커널에 포함시킨다. • Linux2.4/arch/arm/kernel/Makefile • 커널을 새로 컴파일한다.

  5. 시스템 콜 추가 (2) • 새로운 시스템 콜을 사용하는 유저 프로그램을 작성한다. • 새로운 시스템 콜을 사용하여 프로그램을 작성한다. • 라이브러리를 수정한다. (ar, ranlib)

  6. 시스템 콜 추가 (3) • sys_call_table • syscall number : Linux2.4/include/asm/unistd.h #define __NR_SYSCALL_BASE 0x900000 #define __NR_exit (__NR_SYSCALL_BASE+ 1) #define __NR_fork (__NR_SYSCALL_BASE+ 2) #define __NR_read (__NR_SYSCALL_BASE+ 3) …. #define __NR_wrapper (__NR_SYSCALL_BASE+ 227) • sys_call_table : Linux2.4/arch/arm/kernel/calls.S ENTRY(sys_call_table) .long SYMBOL_NAME(sys_ni_syscall) /* 0 */ .long SYMBOL_NAME(sys_exit) /* 1 */ .long SYMBOL_NAME(sys_fork_wrapper) /* 2 */ .long SYMBOL_NAME(sys_read) /* 3 */ …. .long SYMBOL_NAME(sys_wrapper) /* 227 */ .rept NR_syscalls-216 .long SYMBOL_NAME(sys_ni_syscall) .endr

  7. 시스템 콜 추가 (4) • 커널 내부의 시스템 콜 코드의 일반적인 형식 asmlinkage int sys_fork(regs) /* arch/arm/kernel/sys_arm.c */ { return do_fork(..); } int do_fork(..) /* kernel/fork.c */ { …. /* create new process */ } asmlinkage int sys_read(fd, buf, count) /* fs/read_write.c */ { ….. /* read data */ }

  8. 시스템 콜 추가 (5) • 시스템 콜 추가 예제 (2) 3. 시스템 콜 코드 작성 (kernel/mysyscall.c) asmlinkage int sys_wrapper(int a, int b) { printk(“Hello Linux, I’m in Kernel\n”); return a * b; } 4. Makefile 수정 (kernel/Makefile) O_OBJS = sched.o fork.o exec_domain.o panic.o printk.o \ wrapper.o 5. 커널 재 컴파일

  9. 시스템 콜 추가 (6) • 시스템 콜 추가 예제 (3) 6. 사용자 프로그램 작성 #include <linux/unistd.h> #include <stdio.h> _syscall2(int, wrapper); int main() { printf(“sum = %d (use wrapper())\n", wrapper(10, 10)); }

More Related