(우분투)initramfs에 개발한 Device 모듈을 집어 넣고 싶습니다..

multibg의 이미지

안녕 하세요..

우분투 부팅 단계에서 특정 디바이스 모듈을 올리고 싶습니다.

Root filesystem 이 로딩 되기전에 개발한 device 드라이버을 먼저 구동 하고 싶습니다.
자료 조사 결과,initramfs을 수정 하여 개발한 Device드라이버을 올리면 될것 같은데..
..생각 보다 자료가 많이 없고.. 벌써 1주일째 삽질 중 입니다.

질문 )
아시는 바와 같이 initramfs이 gizp으로 압축된 CPIO 아카이브 형태 입니다.initramfs에 Device 모듈을 집어 넣고(update-initramfs 명령어 수행시 자동으로 initramfs에 Device 모듈이 자동으로 들어 가고 싶습니다.) 그리고 부팅시 Ram FileSystem에서 해당 Device 모듈을 로딩 하고 싶습니다.

말이 두서 없는 데요,,
1) initramfs에 개발한 Device 모듈을 집어 넣는 방법?
2) 부팅시 (initramfs이 Ramfilesytem에 압축을 풀고)개발한 Device 모듈을 실행 할수 있는 방법?
을 알고 싶습니다.

읽어 주셔서 감사 합니다.

goforit의 이미지

일단 하고자 일이 Ubuntu 플랫폼 자체 매우 의존적입니다. 다른 리눅스 플랫폼은 또 다릅니다.

>1) initramfs에 개발한 Device 모듈을 집어 넣는 방법?

#A 하기 디렉토리로 이동


$ cd /usr/share/initramfs-tools

#B 가장 쉬운 모듈 로딩 예제 " verafb"를 사용하는 파일을 찾아 복사한 후 파일 이름 변경

 
$ grep -nr vesafb *


> 2) 부팅시 (initramfs이 Ramfilesytem에 압축을 풀고)개발한 Device 모듈을 실행 할수 있는 방법?

이 부분이 "1)" 보다 먼저 선행 되어야합니다.
먼저 Ubuntu에서 custom 커널을 어떻게 빌드해야 하는지 찾아 봐야됩니다. Please Googling
커널을 많이 빌드했지만, Ubuntu용으로 커널을 만드는 것은 다시 하고 싶지 않습니다.. ^^ (짜증, 시간 소비..)

대략 순서:
#A-1 커널 빌드
#A-2 패키지 빌드
------ 싸인도 해야 되구, 패키지 변화 툴도 사용해야합니다.

#B-1 다시 본인이 만들 모듈 커널 디렉토리에 넣고
커널 설정하고, #A-1, #A-2 실행

multibg의 이미지

몇일을 삽질 하였는데 답글이 여러가지 아이디어를 주셔서 문제 해결에 많은 도움이 되었습니다.
정말로 감사 드립니다 ^^.

아래의 부팅 절차 상에서 Real Root을 올리기 전에 D)단계에서 특정 Device 모듈을 메모리 상에 올리는것이 목적 이었습니다.
(일단은 기본적으로 커널 커스터마이징을 하지 않는 기본 전제가 있었기 때문에 약간은 제약 사항이 있었습니다.)

A) BIOS (부팅 Order)
B) MBR (grub 등의 부트 로더)
C) vmlinuz (커널)
D) initrd (/init) => 이곳이서 모듈을 로딩.
E) real root (/ dev/sda1 등의) /sbin/init
F) /etc/inittab의 등등 처리

1) initramfs에 개발한 Device 모듈을 집어 넣는 방법?

/usr/share/initramfs-tools/hooks 아래에 스크립트을 아래와 같이 작성 하여 initramfs이지미에 모듈을 집어 넣었습니다.

#cp ./XXX_detours.ko /sbin/XXX_detours
#cd /usr/share/initramfs-tools/hooks
#touch XXXdetours
#vi XXXdetours
#!/bin/sh
PREREQ=""

prereqs()
{
echo "$PREREQ"
}

case $1 in
# get pre-requisites
prereqs)
prereqs
exit 0
;;
esac

. /usr/share/initramfs-tools/hook-functions

copy_exec /sbin/XXX_detours

#chmod a+x XXXdetours
#update-initramfs -u => initramfs을 업데이트을 수행.

2) 부팅시 (initramfs이 Ramfilesytem에 압축을 풀고)개발한 Device 모듈을 실행 할수 있는 방법?

/usr/share/initramfs-tools/scripts 아래에 스크립트을 아래와 같이 작성 하여 부팅시 Ram Filesystem에서 구동이 되도록 한다.

#cd /usr/share/initramfs-tools/scripts/local-top
#touch XXXdetours
#vi XXXdetours

#!/bin/sh

PREREQ=""
prereqs()
{
echo "$PREREQ"
}

case $1 in
prereqs)
prereqs
exit 0
;;
esac

insmod /sbin/XXX_detours <= 1단계에서 initramfs 아카이브에 등록된 모듈

#chmod a+x XXXdetours
#update-initramfs -u

rebooting...
#lsmod => 로딩 되었는지 모듈을 확인

그럼 수고 하세요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.