본문 바로가기

IT/Toybox

Toybox 오픈소스 프로젝트 참여하기 -1

/* 
written by kaspy (kaspyx@gmail.com)
*/ 

toybox 공식 홈페이지 : http://www.landley.net/toybox/


- 리눅스 유틸리티 프로그램

- BSD License


프로그래머라면 누구나 한번 해보싶은게 오픈소스에 참여하여 자신의 copyright이 새겨 contribution을 하는것을 해보고 싶지 않을까요??  


오픈소스 프로젝트 toybox에 참여하는것도 좋은 방법입니다.


아래 설명은 http://www.landley.net/toybox/code.html 에나와있는 내용을 정리한 내용입니다.


1. 소스코드 clone 하기


 오픈소스니까 당연히 소스코드가 공개되어있습니다!! mercurial을 통해서 소스코드를 가져오는방법입니다.
(머큐리얼 설치는 'sudo apt-get install mercurial')


아래 명령어는 홈 디렉토리 경로(~) 아래에있는 toybox 디렉토리에 최신버전에 대한 코드를 다운받는 명령입니다.


hg clone http://landley.net/hg/toybox ~/toybox



2. 빌드 & 컴파일 하기


 다운받은 소스코드를 빌드 하기위한 명령어는 아래와 같이 하나씩 순차적으로 실행해주면 됩니다.


첫번째 "make defconfig" 명령어는 빌드할 명령어를 어떤것들로 지정해주는지를 기본으로 지정해줍니다.


두번째는 지정된 명령어를 빌드를 합니다.

(마지막 "make install" 명령어는 굳이 실행하지 않아도 되는데 환경변수에 등록해주는 명령어입니다.)


make defconfig

make

make install


빌드가 완료되면 아래와 그림과 같이 초록색 이름인 실행 바이너리(ELF)가 만들어지게 되니다.



사용법은, 빌드한 toybox를 실행하려면 아래와 같이 "./toybox ls" 같이 명령어를 실행해줍니다.



help 명령어를 사용하여 각 명령어에대한 ls 명령어에대한 사용법(usage)를 확인할수 있습니다.



명령어들은 기본적으로 종류별 toybox 디렉토리 경로 아래 toys/posix, toys/android, toys/lsb 디렉토리 경로에 소스코드가 위치해있습니다.


3. 명령어 추가/구현 하기


1) 코딩 스타일: 기본적으로 리눅스 커널 코딩 스타일을 따르는데 관련 내용은 여기를 참조하면되는데, 뭐.. 그리중요하진않슴니다.


2) 샘플 코드 복사하기 


toybox는 아직 busybox에 비해 구현된 명령어가 부족한 편입니다. 


구현 완료된 명령어는 여기링크를 참조하고, 만들어보고 싶은 (간단한 명령어 부터)명령어가 있다면  도전해보는것도 좋을거같습니다.


명령어를 추가 구현하기위한 가장 좋은 방법은 toybox 내에 있는 샘플 명령어 소스코드를 복사해서 수정하여 사용하는 것이 제일 좋습니다.


샘플 소스코드는 toybox 디렉토리 아래 toys/example/hello.c 그리고 toys/example/skeleton.c 에 위치해있습니다.


hello.c 라는 파일은 "Hello world"를 출력해주는 간단한 샘플 코드입니다.


이파일을 복사 및 수정하여 새로운 명령어를 추가해보도록 하겠습니다.


 저는 first 라는 명령어로 이름을 정하여 설명 하도록 하겠습니다. 복사할 위치는 "toys/other" 디렉토리 경로 아래로합니다.

(cp toys/example/hello.c toys/other/first.c)



우선 hello.c 라는 소스코드의 내용은 아래와 같습니다. (수정해야할 내용은 빨강색 박스로 표시)



3) 코드 수정하기


위에 그림처럼 수정해야할 내용은 빨강색으로 표시를 해두었습니다.


첫번째 빨강색 박스는 구현한 날짜, 자신의 copyright 및 이메일주소, 레퍼런스 및 관련 URL을 기입합니다.


두번째 빨강색 박스는 config에 대한 파일입니다.


아래와 같이 수정해줍니다.


USE_HELLO(NEWTOY(hello, 0, TOYFLAG_USR|TOYFLAG_BIN))

 

config HELLO

  bool "hello"

  default n

USE_FIRST(NEWTOY(first, 0, TOYFLAG_USR|TOYFLAG_BIN))

 

config FIRST

  bool "first"

  default y


help 문자 아래는 "toybox help 명령어"를 쳤을때 사용법에 대한 내용을 출력해줍니다.


세번째 #define FOR_hello 는 #define FOR_first


맨 아래 hello_main() 은 first_main() 으로 수정해줍니다.


저는 first 라는 명령어를 그냥 제가 원하는 문자열을 출력해주게 만들었습니다(첨부파일 및 아래 그림 참조)

first.c




4) 명령어 빌드하기

 

 추가한 명령어는 2번의 과정을 다시 한번 해주면 됩니다.


반드시 "make clean" 명령어를 실행한 다음에 아래의 명령어를 순차적으로 실행해줍니다.


make clean

make defconfig #(or menuconfig)

make


추가한 명령어 실행은 아래와 같이 확인합니다.



4. 명령어 기부(Contribution) 하기


 구현 완성한 명령어는 toybox@lists.landley.net 에게 보내주면 됩니다. 물론 저런 명령어를 contribution 할수는 없겟죠.. 


하지만 리눅스를 다루면서 편리하게 할수있는 명령어나, 자신이 구현할줄아는 명령어가 있다면, 또는 새로운 명령어를 만들고싶다면 도전해보시기 바랍니다.


아래 링크, 메일링 리스트에 가입하여 toybox에 대한 궁긍한 내용이나 이슈를 같이 공유하는것도 좋은 방법입니다.


http://lists.landley.net/listinfo.cgi/toybox-landley.net


5. 마치며


 이로써 toybox 오픈소스 프로젝트에 대한 내용을 다루어보았습니다. 다음에는 tobyox 에서 사용하는 래퍼(wrapper) 함수 및 명령 옵션 파라미터 사용법 그리고 실제 contribution한 명령어를 다루도록 하겠습니다.


* 참조 내부링크


 - Toybox 오픈소스 프로젝트 소개


'IT > Toybox' 카테고리의 다른 글

Toybox - strings contribution  (0) 2017.04.01
Toybox 오픈소스 프로젝트 참여하기 -2  (0) 2015.11.27
Toybox 오픈소스 프로젝트 소개  (2) 2015.09.23