'Programming/Kernel'에 해당되는 글 7건

  1. 2008.06.27 리눅스와 윈도우의 fat 파일쓰기 차이??? 8
  2. 2008.04.15 확실히 다르잖아!! 4
  3. 2008.03.11 ctags 설정 4
  4. 2007.04.22 본체 전원키로 시스템 off 시키기 4
  5. 2007.04.06 운영체제 없이 화면에 A를 찍어보아요... 6

리눅스와 윈도우의 fat 파일쓰기 차이???

<이포스팅은 틀린거 같습니다 일단 무시해주세요>

아주 인기없는거만 골라서 포스팅 ㅋㅋ

근데

왜 접때 만든 fat이미지 만드는거가지고 놀고 있었는데요..

이상하게 윈도에서 플로피에 쓴거랑

리눅스에서 (접때포스팅때 만든 이미지 생성기로) 플로피에 쓴거랑

똑같이 써지는게 아니더군요??

다른건 다 같은데

일단 앞에 썻던것처럼 마운트(또는 삽입) 후 아무 파일인 생성한후

hexedit로 각각 연다음에 확인해보니까

0x200 부분과 0x1400 부분이 다르더군여

리누기에서는 F0 FF FF 00 F0 FF

윈도우에서는 F0 FF FF FF 0F 00

그리고 첫번쨰파일 read하는 위치가 (디스크내)

리누기에서는 0x4400

윈도우에서는 0x4200

아마 윗부분(0x200,0x1400) 이 관장하는것이 첫번째(?)파일의

처음위치와 관련된듯한데.

(저번에 C소스에서는 "이거 뭥미" 라고 적어놨던 부분..좀 이해가 가는군요)

그런데 어째 리눅이랑 윈도우랑 역바이트일까요..

제가 전에 만든거가 틀렸는것도 아닌것 같은것이

파일 쓰는건 운영체제가 알아서 하는거라.. ;음..

일부러 이렇게 만들어놨나 -_- 그냥 윈도우기 시러서?

아닌가?? 내가 어디서 잘못한건가 ㅜ

이건 고정되지 않고, 유동적인값???????????

덧> 사실 제가 "윈도우에서 했다" 라는것 처럼 적어놨는데..

제가 직접해본건 아니고..

책에서 이걸 "윈도우에서 만들기 때문에" 윈도우라고 적은거 뿐입니다
---------------------------------------------------------------
아.. 나는 정말 책의 설명을 보는건지 책을 분석하는건지 -_-...

중간에 이해 안 가는게 있으면 뒤로 진도를 못빼는 스타일 ㅜ

역시 이해력이 딸리면 이렇게 해야 ㅜㅜ

'Programming > Kernel' 카테고리의 다른 글

확실히 다르잖아!!  (4) 2008.04.15
ctags 설정  (4) 2008.03.11
본체 전원키로 시스템 off 시키기  (4) 2007.04.22
운영체제 없이 화면에 A를 찍어보아요...  (6) 2007.04.06
KernelProgramming-printk  (5) 2006.07.24

확실히 다르잖아!!

EQU 는 C의 #define 과 다르다!

아놔 "인텔프로세서를 위한 시스템 프로그래밍" 책아 님하 맞을래여??

왜 

"상수를 정의할때는 EQU나 = 를 사용한다. 여기서 EQU로 정의된 상수는 재정의가 불가능하다.

이는 고급언어에서 상수로 정의한것 (C언어에서는 #define PI) 3.141592) 와 같은 의미로 쓰이며...."

명백히 따지면 이거 틀렸자나........ 어째서 EQU가 c의 #define이랑 같냐??
그런식으로 하면

ABC EQU "Hello world"
ABC EQU 0x0a,0x0b

db ABC

이런것도 되야지... 않나?? 언되자나???앙??

(문자열이랑 숫자들 연속은 안되드만 뭐., 나도 어셈블러 초짜니까 잘 모름...)

인터넷 찾아보니까 #define,#include(어떤놈은 %include,%define)

같은 전처리기가 어셈에도 있드만?? 이거랑 같다고 해줘야할거 아냐!

오히려, =(참고:이건 EQU와 비슷하지만 값이 변동될수 있다 즉 상수가 아니라는것임 maybe)랑 EQU랑 비교할려면

차라리 const변수랑 일반변수랑 구별해서 적어놓는게 더 나을거 같다고 생각하는데.......

아냐 아냐! 설마 masm은 다른거냐!!!
그럼 쪽팔리는데........ 아마 nasm이 저렇기 때문에 별 다른 차이가 없을거라고
여기긴하는데....... -_-;;;;;;

nasm 의 pre-processor에 대한건 다음 링크를 참조하세요!
http://web.mit.edu/nasm_v0.98/doc/nasm/html/nasmdoc4.html

그런데.........전 시험기간데 대체 지금 무슨짓을 하는걸까요 -_-;;;;;;;;

ctags 설정



<어라 새로운 플긴이네요...... 몰랐네....... 이거함 적용 ㅋ>
리눅스 커널 프로그래밍(IT EXPERT)(CD1장포함) 상세보기
한동훈 지음 | 한빛미디어 펴냄
리눅스 실무서. 이 책은 리눅스 커널 프로그래밍 환경 구축부터 커널 컴파일 개발법, 리눅스 시스템 호출과 모듈 프로그래밍 방법, 문자 디바이스 프로그래밍과 블록 디바이스 프로그래밍, 메모리 관리와 프로세스 관리 등의 내용을 담았다. 부록 CD에는 본문에서 사용한 예제소스와 커널 2.4.32 소스와 커널 2.26.14.6 소스, 데비안 리눅스 최소 설치 버전, VMWare 이미지 및 플레이어가 수록됐다.


리눅스 커널 프로그래밍이란 책을 보고 있습니다

커널책중에 이게 젤 만만해 보이더군요 ( 쉽다는 말이 아니라 그중에서............)

뭐 암튼.;; 근데 앞부분에 ctags를 설정하는 부분이 있길래(csope,tlist는 사용하지만 이건 처음) 122 page..........

따라서 해봤는데 제대로 안되네여..

일단 커널소스있는데서

ctags -R

을 한뒤에 검색...

일단 tags 가 있는데서
vim -t task_struct

하면 잘되는데 그안(vim)에서

:ta mm_struct 하면 안되는겨 -_- 그래서 구글도 찾아보고 하니까 답이 나오네...

~/.vimrc에다가

set tags=./tags,tag파일이있는작업디렉토리/tags,.............. "여기 set tags를 아예 안적으면 ctags가 제대로 작동 X

라는 식으로 tags파일을 "절대경로" 로 정해줘야 하네요.. 직접 저 태그파일의 경로를 말이에요..

그러니까 control + ] 도 잘 동작하네요 ㅋ

<대충 요약> 자세한건 :help tags (이겟죠뭐)
control + ] => 현제 커서위치에 해당하는 자료구조로 이동
control + t => 좀전의 위치로 이동
:ta XXX     => tag파일에서 XXX 검색
:ta /XXX    => tag파일에서 XXX 포함하는것도 검색
:tj XXX     => 2개이상이면 ls처럼 list 출력
:tn,:tp      => (tag)next,prev
tags        => History list

아나 설정파일 같은거 할때 책에 이런거좀 적어주지 칫.,. 데뱡이나 펫호라아님 무시하는 건가효??

우리 아치는 머셈??

내가 만드는 호좁한 기껏해야 천줄안팍인 프로그램은 이딴거 별 필요 없었는데....... 확실히 커널크기가 크니까

이런것도 필요한듯하네요

음......글구 스터디할분이랑 같이 수요일날부터 하기로 했는데 같이할님이랑 못만나겠네요......

일단 혼자서라도 해야...............

.......................학과 공부 대충하고 이거 해도 되려나........

덧> tags파일이 자주 수정된다면 걍 crontab에 등록시켜 버려도 될거 같다 알아서 갱신하게 ㅋ

학교땜에 바빠서 제대로 건들일수가 없네여 ㅜㅜ

본체 전원키로 시스템 off 시키기


원래 내가 쓰고 있는 리눅스에서는 전원버튼 눌르는거만으로는 시스템이 안꺼졌다 ...;

사실 별 필요 없는 기능 (.............) 이기때문에..

(왜냐햐면 단축키로 컴퓨터를 끄는게 더 빠르기 때문..

control+window_key+alt+delete라는 극악(?)의 조합으로 종료 시킴 -_- )

뭐 모르고 리눅스를 들어오는 가족들한테는 좀 도움이 될까.. (걍 전원버튼 누르면 꺼져여~ 하면 되니..)

뭐 암튼간에 커널에서 저어어 부분을 모듈 체크 하고 rc.conf에서 모듈을 잘 올려주면 문제없이 잘 작동했다

꼭 모듈로 올려야 하는것 같다 커널자체에 넣어버리면 동작이 안되네...
사용자 삽입 이미지

사용자 삽입 이미지

그리고
"여기여"
를 보고 파일을 수정(추가) 해주면 된다

원래 아치 리눅스 배포판에서는 아마 기본적으로 모듈올려주고 할거 같으니까
아마 저 링크타고 수정만 좀 해주면 될거 같다
데비안같은경우에는 저럴필요도 없고 그냥 패키지 설치하면 된다고 하는데 아치도 그냥
간단하지만 패키지하나 만들어 주면 좋겠다 (귀찮으니까............)

'Programming > Kernel' 카테고리의 다른 글

확실히 다르잖아!!  (4) 2008.04.15
ctags 설정  (4) 2008.03.11
운영체제 없이 화면에 A를 찍어보아요...  (6) 2007.04.06
KernelProgramming-printk  (5) 2006.07.24
Kernel Panic!  (2) 2006.07.21

운영체제 없이 화면에 A를 찍어보아요...

말하기 앞서서
일단 세그먼트/오프셋이 뭔지 알고 있다고 가정하고  내용을 작성하였습니다.
그것만 알고 계시다면 다음 이야기를 읽는데는 지장이 없을듯하네요
뭐 틀린내용이 있을수도 있으니 100%다 믿진 마시고요;
혹시 틀린게 있으면 지적 부탁합니다
덧> vmware,nasm,vi 정도는 다 아신다고 가정

0 preview
[org 0x07C0]:처음 시작 주소를 여기부터 시작한대여..바이오스가 이주소를 제일 먼저 읽는다고 함
(왜 거기냐? 라고 묻지마세요 저도 모릅니다 찾아도 도저히 못찾겠더라고요..혹시 아시는 분 있으면 댓글 부탁;)
mov        :데이터 치환 (nasm에선 mov ax,0x07 하면 ax=0x07과 같다고 보면 된다)
byte[es:di]:es레지스터에서 di의 오프셋의 위치의 데이터에서 byte(1byte)만큼 데이터를 읽는다
C랑 비교한다면
char buf[3];            이 있다고 할때
char는 byte,buf 는 es, []안의 숫자는 di로 보면 되겠다...(이게 더 복잡한가?)

=>plus! 그리고 byte[di] 같이 쓰는것은 ds레지스터를 생략해서 쓴것뿐이다
(ds세그먼트의 di 오프셋)
byte[ds:di] == byte[di]랑 같다는 얘기!!

1우리가 알아야 하는것
1)0x7C0라는 주소(세그먼트) 에 프로그램을 위치시켜야한다(org []라는게 이말이다)
2)비디오 메모리(화면에 출력하기 위한) 의 세그먼트는 0xB800이다
3)비디오 메모리 세그먼트가 가리키는 위치에 (오프셋대로)순서대로 값을 집어 넣는다
==>offset 에 관해서.. 첫번짜 byte는 문자 두번째 바이트는 색깔을 잡어 넣는다
ex> 0x07이라면.... 0검정 7하양(0x 0 7)

  1 [org 0x07C0]
  2
  3 mov byte[0xB800:0x0000],'A'  
  4 mov byte[0xB800:0x0001],0x07

이상하네... 바로 메모리 접근이 안되나보다.세그먼트 레지스터를 이용해서 접근해보자
es세그먼트(사용자세그먼트 레지스터)레지스터에다가 0xB800를 (컬러 비디오 메모리 주소)
복사한다음 그 값을 복사한 범용레지스터를 다시 세그먼트 레지스터에 복사해 넣는다
대충 다름과 같은 예가 되겠지...
ax=0x07
es=ax
암튼....그리하여 ax,로 넘긴다음  ... es를 설정해준다

  1 [org 0x07C0]
  2
  3 mov ax,0xB800
  4 mov es,ax
  5    
  6 mov byte[es:0],'A'
  7 mov byte[es:1],0x07

이리하면 잘아알 실행됨.. 화면에 당당히 A출력,바탕은 검정,글색깔은 흰색
ds 레지스터를 이용하여 좀더 간단하게

  1 [org 0x07C0]
  2
  3 mov ax,0xB800
  4 mov ds,ax
  5    
  6 mov byte[0],'A'     ;[ds:0]
  7 mov byte[1],0x07;[ds:1]
 
일단 좀더 폼 잡어서 약간더 추가하면..
  1 [org 0x07C0]
  2
  3 start:
  4     mov ax,0xB800
  5     mov es,ax
  6     mov di,0
  7
  8     mov byte[es:di],'A' 
  9     inc di ;c로 치면 di++
 10     mov byte[es:di],0x07
 11
 12     jmp $

추가:jmp $란 현재주소에서 현재주소로(?) jump!하기다 즉,제자리 뛰기
현재상태를 유지하기 위해서다 (프로그램이 끝나면 안되므로..그래도 때에 따라서 돌아가는덴 지장 없을때도)

아놔 이거 하나 안다고 정말 뻘짓한 시간 생각하면 크윽..;;
어셈블리 생판 모르는 상태애서 이거 이해한다고 어려워 죽는줄(?) 알았어영 ㅜㅜ
저같이 삽질을 하시는 분을 조금이라도 줄이기 위해서 이글을 바칩니다 ㅜㅜ 어흑...

'Programming > Kernel' 카테고리의 다른 글

확실히 다르잖아!!  (4) 2008.04.15
ctags 설정  (4) 2008.03.11
본체 전원키로 시스템 off 시키기  (4) 2007.04.22
KernelProgramming-printk  (5) 2006.07.24
Kernel Panic!  (2) 2006.07.21
prev 1 2 next