본문 바로가기
Study/OS

Ubuntu 9.10 에서 YAFFS2 Mount 하기

by SeulKom 2009. 11. 6.
0. 커널 컴파일을 하기 위한 기본 셋팅

커널 컴파일을 위해선 다음의 package들이 필요

build-essential
kernel-package
libncurses5-dev                                    # ncurses 를 기반으로 하는 화면-menuconfig-에서 설정하기 위한 것
libgtk2.0-dev, libglib2.0-dev, libglade2-dev   # GTK 기반 화면-gconfig-에서 설정하려면 설치해야 할 것
libqt-mt-dev                                             # QT 기반 화면-xconfig-에서 설정하려면 필요한 것

[실행]
# apt-get install build-essential
# apt-get install kernel-package
# apt-get install libncurses5-dev libgtk2.0-dev libglib2.0-dev libglade2-dev
# apt-get install libqt-mt-dev


Ubunut에는 linux-source가 default로 포함되어 있지 않으므로 linux-source도 설치
(시냅틱 패키지 관리에 가면 간단하게 설치 가능하다)

커널 소스를 다운 받으면, /usr/src/ 디렉토리 안에 저장됨
* 압축 풀고나서 /usr/src/linux-source-[kernel_version]에 들어가 menuconfig를 통해 kernel 옵션을 수정 ('3.' 에서 실행)

[실행]
# tar -xjvf linux-source-[kernel_version]


1. 서버에서 YAFFS2 다운로드





우리는 YAFFS2를 다운 받을 예정이므로
yaffs2/ 폴더에 들어 간 후 하단에 있는 Download GNU tarball 을 통해 tar 파일을 다운 받는다
다운받은 파일을 tmp 나 home 폴더 등 원하는 경로에 압축을 푼다

[실행]




2. /usr/src/linux-[version]/fs 경로에 YAFFS2 설치

YAFFS2 source를 linux-[version]에 포함시키기 위해 필요한 파일들을 /usr/src/linux-[version]에 저장한다.
이미 압축을 푼 폴더 내에 .sh 파일이 있으므로 이를 이용한다.
실행 하고 나면 자동으로 /usr/src/linux-[version]/fs/yaffs2 가 생겼음을 알 수 있다.


[실행]
# cd yaffs2
# ./patch-ker.sh                 // .sh 파일



3. make menuconfig 를 통해 config 파일 저장

(커널 메뉴 설정)
 make menuconfig 는 /usr/src/linux-[version]/ 디렉토리 안에서만 가능한 명령이다.

(각 디렉토리에 Makefile과 Kconfig가 존재한다. 이를 이용하여 menuconfig 에서의 메뉴형태를 변경할 수 있다)

/usr/src/linux-[version]/fs/yaffs2 에 존재하는
Makefile과 Kconfig를 통해 원하는 방법으로 menuconfig를 수정 할 수 있다.



[실행]
# make menuconfig


a. File systems를 선택한다

 
b. Miscellaneous filesystems 를 선택한다


 
c. YAFFS2 file system support 를 선택한다



4. 커널 설정 저장 후 커널 컴파일


exit 버튼을 누르고 save 창이 나오면 save를 한다.
설정값이 /usr/src/linux-[version]/.config 파일에 저장된다.


[실행]
# make clean                                  
# make bzImage install                     # vmlinuz 를 /boot 에 추가
# make modules modules_install       # /lib/modules 에 커널 추가



5. 새로 만든 커널 initrd를 통해 /boot/grub에 추가

vmilnuz              # 기존의 다른 linux에서 사용되는 bzImage 와 같다. bzImage를 rename
config                 # 커널 컴파일 시 사용된 config 파일
system.map      # fatal error가 발생한 경우 recover를 위해 필요한 파일
initrd.img           # root file system을 실제로 mount 하기 위한 파일

새로 만든 커널을 부팅 시 실행 하고 싶다면 grub에 initrd를 추가해야 한다.

[실행]
# cd /lib/modules
# update-initramfs -c -k [kernel_module_directory_name]


실행하고 나면, /boot 에 initrd.img 파일이 생성된다.

Ubuntu가 9.10로 올라가면서 grubmf grub2로 업데이트 되었기 때문에
설정파일이 /boot/grub/menu.lst 에서 /boot/grub.cfg 로 변경
grub.cfg 는 readonly 파일이기 때문에 직접 수정하면 안된다.

[실행]
# update-grub
# grep "menuentry" /boot/grub/grub.cfg


실행하면 생성된 initrd를 메뉴에 추가한 것을 확인 할 수 있다.
새로 만든 커널을 등록해서 부팅


6. Nandsim module 추가 및 YAFFS mount

/dev 디렉토리에 mtd와 mtdblock이 존재 하지 않으면 modprobe로 mtdblock을 추가
modprobe로 nandsim도 추가 후 yaffs 마운트

[실행]
# modprobe mtdblock
# modprobe nandsim
# insmod yaffs.ko
# mkdir [마운트 할 위치]
# mount -t yaffs2 /dev/mtdblock0 [마운트 할 위치]
# cat /proc/filesystems (확인)

* modprobe를 실행했을 경우 다음과 같은 에러가 발생하면
-----------------------------------------------------------------------------------------------------------------------------------
WARNING: all config files need .conf /etc/modprobe.d/vmware-tools it will be ignored in a future release
-----------------------------------------------------------------------------------------------------------------------------------

[실행]
# sudo mv /etc/modprobe.d/vmware-tools /etc/modprobe.d/vmware-tools.conf






Reference : http://programmerjk.springnote.com/pages/2456582?print=1
                 http://wiki.kldp.org/wiki.php/KernelModuleProgrammingGuide
                 http://www.linux.co.kr/home2/board/bbs/board.php?bo_table=lecture&sca=1&sca2=32&sca3=&wr_id=1639