이 문서는 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 이 커널에 있는 파일을 가져왔겠죠?



+ Recent posts