'개발'에 해당되는 글 4건

  1. 2010/07/26 | 링커 스크립트
  2. 2009/12/17 | 감성을 위한 기술 (2)
  3. 2009/03/25 | vi를 이용한 개발 관련 팁 과 색인을 이용한 방법 (1)
  4. 2009/03/23 | diff 와 patch 사용법

링커 스크립트

배움생활/SoC | 2010/07/26 16:53
Posted by blueecho
링커스크립트 관련 박상호님께서  MPSoC스터디 모임 게시판에 올려주신 내용입니다.


토요일 스터디 모임에서 잠시나마 소개(?)를 했었던 링커 스크립트에 대해서 간략히 요약을 해 드리겠습니다.

링커 스크립트는 한마디로 말하면 object파일들의 각 영역에 대한 재정렬을 하는 스크립트라고 보시면 편하실 것입니다.


 더 자세히 공부해 보고 싶으시는 분들은 다음의 링크를 참조하시기 바랍니다. 한글 번역이 되어 있습니다. 잠시(?) 읽어보셈.. ^^;

http://korea.gnu.org/manual/release/ld/ld-mahajjh/ld_toc.html


  컴파일러가 컴파일을 하게되면 그 결과 파일이 object파일이 생긴다는 것은 잘 알고 계실것입니다.

이 각 object 파일들은 내부적인 어떤 포맷(보통 리눅스는 elf32,  윈도우는 coff 포맷을 가지고 있죠..)에 따라서

여러개의 섹션이란 녀석들을 가지고 있습니다. 대표적인 섹션이라면 코드 섹션(.text) 와 데이터 섹션(.data) 이 있습니다.


각 섹션들은 새롭게 빌드 과정에서 만들어 질수도 있고, 포맷별로 다른 이름을 가지고 있는 경우도 있죠. 컴파일러가

object파일을 만들면서 잘 분류를 해놓아서, 각 섹션에 차곡차곡 그 정보가 쌓여있게 되지요.


이후에 링커가 이들을 가지고 실행파일을 만드는 것을 이미 알고들 있으실터...


  일반적으로 링커는 내부정의된 링커 스크립트를 가지고 있고(default linker script), 이번에 봤던 임의의 스크립트를 연결해서 쓰는

경우도 있죠. 이 스크립트에 의해서 각 섹션을 다시 재 정렬 하는 녀석이 링커가 하는 역할이다라고 보시면 됩니다. 스크립트에 의해 마음대로 위치를 떡 주무르듯 할수가 있는 것이지요.


예를 들어보면, a.o에 (.text, .data)가 있고, b.o에 (.text, .data, .idata)가 있다고 하죠.

스크립트를 다음처럼 구성하면...
section {
 .text : { a.o(.text) } // a.o에서 .text 영역만을 .text 영역으로 구성하라!!
 .data : { *(.data) } // 모든 입력 파일에서의 .data 영역들을 가지고 .data 영역으로 구성하라!!
}

a.o에서 .text영역을 앞에두고, 모든 .data영역을 가지고 있는 입력 파일에서
차례대로 .data 영역을 읽어와 재구성을 하게 됩니다. 그 구성의 내용은

//////////////////////////////
//         a.o(.text)        //
//////////////////////////////
//         a.o(.data)        //
//         b.o(.data)        //
//////////////////////////////

가 되겠습니다. 여기서는 b.o의 .text 영역과 .idata여역은 스크립트에는 정의되지 않았기 때문에
최종 출력파일에는 b.o의 코드 영역은 들어갈수가 없습니다. 예로든 스크립트에
의해서 재정렬을 해보았지만, 결과 파일은 별 의미가 없는것 같군요.. ㅡㅡ;


한페이지 정도로 어떤 역할을 하는지 이해가 가셨으면 이번 글은 성공입니다.. ㅋㅋ

링커 스크립트에는 알수없는 외계(?)문자들이 많이 있으니 각 옵션을 알고 싶으신분은 위쪽 링크를 따라가셈...

'배움생활 > SoC' 카테고리의 다른 글

유지보수가 어렵게 코딩하는 방법  (0) 2011/12/16
C언어 매크로에서의 팁  (0) 2010/08/09
링커 스크립트  (0) 2010/07/26
verilog 2001에서 배럴쉬프터 짜기....  (0) 2010/07/09
infer_mux 지정자  (0) 2010/07/06
H.264의 대항마가 나오네요....  (0) 2010/05/24

감성을 위한 기술

끄적끄적 | 2009/12/17 22:26
Posted by blueecho

요즘 학교 화장실에 사람을 감지하고 불을 켜는 시스템이 설치되었다.
뭐냐하면 밤에 사람없을때는 꺼져있다가 사람이 들어오면 켜지고 나가면 꺼지는 형태의 시스템인데 나름대로 사람의 숫자도 카운트 하는 것 같은데...
이게 문제가 뭐냐면 들어갈때 파딱파딱 켜지는 것은 괜찮은데 나갈때 바로꺼지는 건 기분이 나쁘다는 것이죠.
단순히 꺼지는 시간이 5~10초정도만 늘렸어도 나가고 나서 좀 있다가 꺼지면 괜찮을 것 같은데...
하여간, 단순히 비콘과 리시버를 이용해서 전원공급을 ON/OFF하는 시스템이지만 좀만 더 고려하면 좋을 듯한데 기술자들은 쉽지 않죠.
개인적으로 전자기기를 좋아하는 편이기도 하지만 엔지니어계열(?)인 전자공학전공으로 만드는 사람은 많이 써봐야 된다가 슬로건인 저로서는 개발자도 테스트에 참여를 하던지 아니면 테스터들의 역량이 강화되었으면 좋겠어요.
물론 쉽지도 않는데다가 돈이 더 들겠지만 말이죠.. -_-;;

가끔씩 사람이 없는데도 불이 켜져있는 진풍경을 보게 됩니다. 비콘과 리시버의 오동작이죠. 연구실 후배 말로는 달려나가면 감지를 못한다고 하더군요.
역시.. 결함의 발견은 일반적인 행동을 벗어나는 사람이 더 잘 찾는 것 같습니다. ㅋㅋ
뭐, 이것도 일정시간이상 감지가 안되면 꺼지게 하면 될텐데... 고려를 안했나봐요.

저도 개발때 똑같겠죠? 에효....

'끄적끄적' 카테고리의 다른 글

현재 접속상태인가요? (크리스마스기념)  (1) 2009/12/25
[펌글] 1년차 사원들이 느끼는 불편한 진실  (0) 2009/12/22
감성을 위한 기술  (2) 2009/12/17
오늘의 음료?? --  (1) 2009/12/17
남 vs 여  (1) 2009/12/15
이것이 인생인가? -_-;;  (0) 2009/12/15
요즘들어서 vi를 이용한 편집을 사용하긴 하지만 무식한 방법을 이용한 검색을 하거나, kdevelop같은 IDE툴을 사용할 때가 많다.
오늘 책에서 본 내용은 ctags와 cscope를 이용한 검색 방법에 대해서 읽었다.

1. 특정 문자열을 가진 파일을 검색하는 방법

command> find . -name (filename) -exec grep -Hn (strings) {} \;


현재 폴더 내에서 특정 filename의 파일들 중에서 strings를 포함하고 있는 파일(심볼릭링크 제외 : -H)과 행번호(-n)를 출력한다.

command> grep -RIwHn (strings) *


-R : recursive, -I : skip binary file, -w : whole word
요런 방식으로도 출력은 가능하다.

2. ctags를 이용한 검색 방법

command> ctags -R


색인을 만들어준다. -R 옵션은 역시 하부 디렉토리 모두 검색한다는 뜻(재귀적)

command> vi -t (strings)


vi의 tag옵션으로 해당 문자열을 가진 열을 찾아서 열어준다.  또는 vi의 명령행 모드에서 다음과 같이 입력한다.

:tag (strings)


또 다른 방법으로는 찾는 문자가 있는 행에서 ctrl+]키를 눌러서 이동이 가능 돌아올때는 ctrl+T이다. 이 명령은 중첩(nested)되어서 사용가능하다.

tj명령을 이용하여서 리스트로 나열된 부분에서 찾을 수 있다. 또한, sta명령을 사용하면 수평창분할을 하여서 보여주기도 한다. ptn의 경우는 다음 태그로 ptp의 경우는 이전 태그로 점프한다.

:tj (strings)
:sts (strings)
:ptn
:ptp

3. scope를 이용한 검색

command> cscope -R


키 용법이 일반적인 것과는 다르니 확인할 것 ?명령으로 확인해야 한다.

command> find . \(-name '*.c' -o -name '*.cpp' ....... -o -name '*.S' \) -print > cscope.files
command> cscope -i cscope.files


원하는 파일들에서 색인을 만들수 있도록 만들어준다. 요 명령의 경우는 쉘스크립트로 만들어서 사용하는 것이 편하다.

vi에서 cscope를 사용하려면 다음과 같은 내용을 vi의 환경설정파일에 첨가해 주어야 한다.

[ ~/.vimrc ]
set  csprg = /usr/bin/cscope
set csto = 0
set cst
set nocsverb

if filereadable("./cscope.out")
    cs add cscope.out
else
    cs add (cscope.out의 주소)
endif
set csverb


이후로는 vi의 cs명령을 사용하여서 검색이 가능하다.

:cs find (질의종류) (심볼)

4. vi팁

1) 파일 탐색기능 활용하여 현재 디렉토리 내에 파일 검색을 하도록 해줌. 단, exploer 플러그인이 설치되어야 함

:20vs ./


위의 예의 경우는 20라인짜리 수직선을 나누고 현재 디렉토리를 검색

2) 괄호탐색의 경우는 { 또는 }에 커서를 놓고 %키를 누르면 쌍이 되는 부분으로 이동

3) 함수를 접기 위해서는 { 문자에 커서를 놓고 v]}zf 명령을 눌러주면 함수가 폴딩된다. v]}는 블록을 형성하고 zf를 누르면 폴딩이 된다. 폴딩을 해제 할 경우는 -> 키를 누르거나 zo명령으로 폴딩을 해제해 준다.
쉽게 하기 위해서 환경파일에 다음과 같이 정의해 주면 편하다.

map <F1> v]}zf


4) 여러행에 탭을 넣을 때는 v 를 이용하거나 V를 이용해서 정리하거나 (수정할 행수)>> 명령 또는 <<를  통해서 조정이 가능하다.

7>>


위의 경우는 아래 7행을 탭하나 만큼 옮겨준다.

5) 복사로인해서 흐트러진 소스의 경우 v를 이용하여 블록을 잡아주고 =키를 눌러주면 정렬된다.

6) 파일을 바로 읽어오기 위해서는 파일명이 있는 위치에 커서를 놓고 ctrl+wf를 누르면 수평분할창에 파일이 열린다. 헤더파일 같은 경우 편하다.

7) 자동완성기능 ctrl+p (앞쪽에서 찾음) ctrl+n (뒤쪽에서 찾음)

  열씨미와 게을러의 리눅스 개발 노하우 탐험기 - Blog2Book 시리즈 02  박재호 지음
'열씨미'와 '게을러'라는 가상인물의 대화를 통해 리눅스로 개발하면서 겪는 개발현장 사례를 14개의 짧은 이야기를 통해 실감나게 그려낸다. 각 이야기는 리눅스 신참인 '열씨미'와 리눅스 해커인 '게을러'의 해결방안을 동시에 수록하고 있어 다 나은 해결방안을 모색할 수 있는 계기를 마련해준다.
  유닉스.리눅스 프로그래밍 필수 유틸리티 - vi, make, gcc, gdb, cvs, rpm  백창우 지음
vi, make, gcc, gdb, cvs, rpm 등 유닉스, 리눅스 개발 환경에서 자주 사용하게 되는 필수 유틸리티의 활용법을 알려준다. 많은 그림과 도식, 구체적인 예제들을 통해 기능과 원리를 설명하고 있어 초중급 개발자도 쉽게 익힐 수 있다.

diff 와 patch 사용법

배움생활/리눅스 | 2009/03/23 20:31
Posted by blueecho
그동안 많이 사용하고 있던 diff에 대해서 여러가지 이야기가 있길래 옮겨본다. ^^

  1. diff명령을 사용할때 문맥형식보다는 통합형식(-u 옵션)으로 사용하자. alias diff="diff-u" 로 정해놓는 것도 좋다.
  2. 파일 패치 배포를 위해서는 diff명령에 -urN 옵션을 준다. -u는 통합형식 -r 재귀적인 탐색, -N은 없는 파일의 경우는 비어있다고 판단하게 하는 것이다.
  3. patch 명령의 경우 -p? 의 옵션의 경우는 ?에 나온 숫자대로 내부의 디렉토리 부분을 생략하도록 한다. /usr/bin/blueecho/test/module의 경우 -p2라고 하면 /usr/bin이 생략되어 최종적으로는 blueecho/test/module의 형태가 된다. -R 옵션인 경우는 거꾸로 diff명령을 통해서 나온 파일을 가지고 원 파일로 복원시키는 작용을 한다.

또한 find라는 명령에 대해서 활용 방법도 있다.

  1. -newer옵션을 사용하여서 -newer 뒤에 나오는 파일보다 새로 만들어진 것만 찾는다.
  2. 파일이 변경된 것을 찾으려면 checksum을 이용한다.
    1. find ~~~~~~ -newer (filename) -exec md5sum {} >> changed.md5 \;
    2. md5sum -c changed.md5 2 > &1 | grep ":FAILED" | awk -F: '{ print $1 }'

awk명령은 패턴 스캐닝 과 언어처리를 하는 것이라고 하는데 아직은 잘 모르겠다. 좀 더 알아봐야 할 듯.... diff와 patch의 경우는 사용하기에 따라 엄청 강력할 것 같다. ^^
요런 방법으로 찾아준다.

아 diff의 KDE용 버젼으로 Kdiff3가 있다. 여러파일을 볼 수 있는게 장점 이랄까?
점점 acroedit와 ultraedit보다 vi가 편해져 가는 것 같은 느낌이.. ^^



  열씨미와 게을러의 리눅스 개발 노하우 탐험기 - Blog2Book 시리즈 02  박재호 지음
'열씨미'와 '게을러'라는 가상인물의 대화를 통해 리눅스로 개발하면서 겪는 개발현장 사례를 14개의 짧은 이야기를 통해 실감나게 그려낸다. 각 이야기는 리눅스 신참인 '열씨미'와 리눅스 해커인 '게을러'의 해결방안을 동시에 수록하고 있어 다 나은 해결방안을 모색할 수 있는 계기를 마련해준다.


블로그 이미지

blueecho

누군가에게 "당신은 무엇을 잘하십니까?"라는 질문을 들었을때 바로 대답할것을 만들어보자~!!

카테고리

분류 전체보기 (488)
NeWs (20)
배움생활 (97)
취미생활 (116)
끄적끄적 (239)
인생설계 (12)
Wish list (4)