커널 모듈 관련 문의 드립니다 !! 도와 주세요 ㅠㅜ
글쓴이: soo20987 / 작성시간: 금, 2007/04/13 - 10:35오전
전에 있던 커널 소스는 잊어버려서 ㅠㅜ
현재 커널 이미지만 가지고 있습니다.
그런데 커널 이미지에 박혀 있는 모듈이 있는데요
박혀 있는 모듈을 사용 하지 않고
그 모듈을 새로 컴파일 해서 insmod해서 사용 하면
커널에서 새로 만든 모듈을 사용 하게 될까요?
아니면 박혀 있는 모듈을 사용 하게 될까요? ㅡㅠ
커널에 그 모듈이 박혀 있는 상태에서 새로 만든 모듈을
insmod 해서 사용 하는 방법이 있을까요?
고수님들 도와주십시요 ㅠㅜ..
Forums:
System.map 이 없다면 ...
System.map 이 없다면 ... 수십배 더 힘들어집니다.
zImage 의 uncompress 부분을 조심스레 떼어내서 보관합니다.
나머지에 gzip 헤더를 만들어 붙여서 gunzip 으로 decompress 합니다.
(한번도 해본적이 없어서 방법도 모르겠고, 떼어낸 나머지에 gzip 헤더가 붙어 있는지 없는지도 모르겠습니다)
System.map 을 열어서 __init_begin 과 __init_end 사이 어디엔가에 기존모듈의 초기화 루틴 엔트리가 있으니 열심히 찾습니다.
찾았다면, decompress 한 바이너리를 hex editor 로 열어서 찾아갑니다.
찾아갔다면, 바로 return 되도록 고칩니다.
바이너리를 다시 gzip compress 합니다.
gzip 헤더를 떼 내야 할지 그냥 둬야 할진 잘 모르겠고...
하여간 아까 고이 보관했던 uncompress 부분을 조심스레 다시 붙입니다.
런타임에 수정하는 방법도 System.map 의 도움을 받아야 합니다.
기존 모듈이 사용하는 resource 와 동작방식을 최대한 알고 있어야 합니다.
인터럽트를 사용한다면 IRQ 번호는 뭔지,
주기적으로 I/O 포트를 감시하는지, 감시한다면 타이머인지, 혹시 커널 쓰레드를 사용하는지.
System.map 을 참고해서,
interrupt description table 의 action 핸들러를 바꿔치기하고,
timer list 에서 timeout 핸들러를 바꿔치기 하고,
커널 쓰레드는 죽일 수 있는 방법을 찾아서 죽여버리고.
그나저나 커널소스(헤더)가 없는 상태라면,
새 모듈을 빌드해도 제대로 동작할런지 보장이 안됩니다.
2.4 커널이야 그리 어렵지 않게 어거지를 쓰는게 가능했지만, 어거지를 쉽게 쓸 수 있다 뿐이지 제대로 된 모듈을 만들어 내는 것은 아닙니다.
댓글 달기