[t:/]$ 지식_

커널 모듈 빌드만 빠르게 하기

2011/02/06

커널이 비대해지니까 정말 지친다.

make modules 등등으로 힘들긴 마찬가지다..
임베디드 커널 다룰 땐 괜찮았지만..
데탑으로 들어오니까 빡...

make menuconfig 로 하나씩 지우다 하나라도 실수하면,
재빌드해야 하는 문제도 있다 -_-;

인생의 1/3은 똥싸고 밥먹는데 소모하고..
인생의 1/3은 와우하는데..
인생의 1/3은 빌드하는데 쓰자는거냐..

사실 커널 2.2 시절에는 빌드 단축을 위해서 *.o 파일을 제외한,
모든 디렉토리를 삭제하는 방법이 가장 쉬운 빌드 시간 단축 방법이었다.

디렉토리 인 아웃이 은근 속도를 엄청 잡아 먹는다.
파일 시스템 공부 해 본 사람은 이유를 알 꺼임..

게다가 디렉토리 들어가서 체크하고 나오고..
에 여튼… 아 몰라..

커널 모듈 빌드만 따로 획기적으로 더 빠르게 하는 방법..

apt-get source linux-image .. $(uname -r)을 달아도 됨..
apt-get install linux-headers..

다 깐다.

/lib/modules/2.6.35. …/build 가 잘 살아 있나 본다.

원래는 헤더만 있어도 된다.

새로 모듈을 만들어보자.

커널 디렉토리 아무 곳에서나 커널 모듈을 하나 짠다.

mkdir test

vim hello.c

#include <linux/module.h>
#include <linux/kernel.h>
int init_module(void)
{
        printk(KERN_INFO “init_module() called\n”);
        return 0;
}
void cleanup_module(void)
{
        printk(KERN_INFO “cleanup_module() called\n”);
}

Makefile을 만든다.

all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

make 하면 잘 된다.

만약 ext3 같은 것을 빌드하려고 하면 에러가 난다.
linux header가 불완전하기 때문이다.
/lib/modules/2.6.35…/build 의 심볼릭 링크를 지운 후, 현재 사용하고 있는 커널 소스에 링크시킨다.
이 커널 소스는 풀커널 소스다.

이래저래 귀찮으면 커널 소스를 우분투의 오리지널 경로인 /build/buildd/linux … 로 복사해둔다.
그러면 /lib/modules/…/build/source 의 심볼릭 링크가 정상적으로 붙는다.

이제 make 하면 잘 된다.
만약 안 된다면 전체 빌드를 한 번 수행한 후 한다. (스크래치 머신에서 실행해 봤는데 필요없다.)
잘 될 것이다.

이렇게 ext3 에서 실험 결과 잘 된다.
ext3 를 복사하여 uccfs 라는 파일 시스템을 만들었다.

Makefile

PWD = $(shell pwd)

obj-m += uccfs.o

uccfs-y := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \
ioctl.o namei.o super.o symlink.o hash.o resize.o ext3_jbd.o

uccfs-$(CONFIG_EXT3_FS_XATTR)    += xattr.o xattr_user.o xattr_trusted.o
uccfs-$(CONFIG_EXT3_FS_POSIX_ACL) += acl.o
uccfs-$(CONFIG_EXT3_FS_SECURITY)         += xattr_security.o

all:
make -C /lib/modules/2.6.38-8-generic/build M=$(PWD) modules

clean:
make -c /lib/modules/2.6.38-8-generic/build M=$(PWD) clean

/include/linux/magic.h 를 까서 EXT3_SUPER_MAGIC 대신 UCCFS 를 하나 등록한다.
/fs/uccfs/super.c 를 까서 위 상수를 내 것으로 다 고친다.
/fs/uccfs/ext3_fs_type를 내 것으로 고치고 다 고친다.

.. 에 이상..









[t:/] is not "technology - root". dawnsea, rss