이 문서는 2011년 11월 28일에 작성되었습니다.
이 문서는 2011년 12월 06일에 업데이트 되었습니다.
커널을 git에 넣어서 빌드하면 커널버전의 끝부분에 dirty가 붙게 됩니다.
dirty가 붙은 커널이 올라가 있는 상태에서 이전에 빌드한 driver 파일(*.ko)을 insmod하게 되면 다음과 같은 에러가 발생하게 됩니다.
ModuleName:version magic '2.6.24.2 mod_unload ARMv6 ' should be '2.6.24.2-g4d300520-dirty mod_unload ARMv6 '
insmod: can't insert '/lib/modules/ModuleName.ko': invalid module format
이런 불편함을 해결하기 위해서는 커널의 Automatically append version information to the version string 옵션을 꺼야 합니다.
바로 이렇게...
----------------------------------------------------------------------------------------------
General setup
----------------------------------------------------------------------------------------------
[*] Prompt for development and/or incomplete code/drivers
() Local version - append to kernel release
[ ] Automatically append version information to the version string
[*] Support for paging of anonymous memory (swap)
[*] System V IPC
[ ] POSIX Message Queues
[ ] BSD Process Accounting
[ ] Export task/process statistics through netlink (EXPERIMENTAL)
[ ] User Namespaces (EXPERIMENTAL)
[ ] PID Namespaces (EXPERIMENTAL)
[ ] Auditing support
<*> Kernel .config support
[*] Enable access to .config through /proc/config.gz
(16) Kernel log buffer size (16 => 64KB, 17 => 128KB)
[ ] Control Group support
[*] Fair group CPU scheduler
Basis for grouping tasks (user id) --->
[*] Create deprecated sysfs files
[ ] Kernel->user space relay support (formerly relayfs)
[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
() Initramfs source file(s)
[ ] Optimize for size (Look out for broken compilers!)
[ ] Configure standard kernel features (for small systems) --->
Choose SLAB allocator (SLAB) --->
----------------------------------------------------------------------------------------------
빌드하고나서 확인하는 방법은 다음과 같습니다.
$ cat ./include/linux/utsrelease.h
#define UTS_RELEASE "2.6.24.2"
쨘~~!!
****dirty 가 없어졌습니다.
다음으로 u-boot입니다.
u-boot 도 GIT로 버전관리를 하면 dirty가 붙습니다.
Makefile을 열어보면 다음과 같은 줄을 찾을 수 있습니다.
여기 빨간색으로 표시한 부분입니다.
@@ -289,8 +289,6 @@ $(U_BOOT_NAND): $(NAND_SPL) $(obj)u-boot.bin
version:
@echo -n "#define U_BOOT_VERSION \"U-Boot " > $(VERSION_FILE); \
echo -n "$(U_BOOT_VERSION)" >> $(VERSION_FILE); \
- echo -n $(shell $(CONFIG_SHELL) $(TOPDIR)/tools/setlocalversion \
- $(TOPDIR)) >> $(VERSION_FILE); \
echo "\"" >> $(VERSION_FILE)
setlocalversion 이라는 파일이 dirty버전을 표시해 주고 있습니다.
이 두 줄을 삭제하면 더이상 dirty 버전은 나오지 않습니다.
여담이지만, 사실 이 파일은 커널에서도 사용됩니다.
아마도 u-boot 이 커널에 있는 파일을 가져왔겠죠?