티스토리 뷰

728x90

1. 24.04에서는 빌드 안됨 - 아래의 에러를 내면서 빌드되지 않는다.

/home/pilseong/practice/kernel/linux/drivers/ata/libahci.c: In function ‘ahci_led_store’:
/home/pilseong/practice/kernel/linux/include/linux/compiler_types.h:334:45: error: call to ‘__compiletime_assert_358’ declared with attribute error: BUILD_BUG_ON failed: sizeof(_s) > sizeof(long)
  334 |         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
      |                                             ^
/home/pilseong/practice/kernel/linux/include/linux/compiler_types.h:315:25: note: in definition of macro ‘__compiletime_assert’
  315 |                         prefix ## suffix();                             \
      |                         ^~~~~~
/home/pilseong/practice/kernel/linux/include/linux/compiler_types.h:334:9: note: in expansion of macro ‘_compiletime_assert’
  334 |         _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
      |         ^~~~~~~~~~~~~~~~~~~
/home/pilseong/practice/kernel/linux/include/linux/build_bug.h:39:37: note: in expansion of macro ‘compiletime_assert’
   39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
      |                                     ^~~~~~~~~~~~~~~~~~
/home/pilseong/practice/kernel/linux/include/linux/build_bug.h:50:9: note: in expansion of macro ‘BUILD_BUG_ON_MSG’
   50 |         BUILD_BUG_ON_MSG(condition, "BUILD_BUG_ON failed: " #condition)
      |         ^~~~~~~~~~~~~~~~
/home/pilseong/practice/kernel/linux/include/linux/nospec.h:58:9: note: in expansion of macro ‘BUILD_BUG_ON’
   58 |         BUILD_BUG_ON(sizeof(_s) > sizeof(long));                        \
      |         ^~~~~~~~~~~~
/home/pilseong/practice/kernel/linux/drivers/ata/libahci.c:1143:23: note: in expansion of macro ‘array_index_nospec’
 1143 |                 pmp = array_index_nospec(pmp, EM_MAX_SLOTS);
      |                       ^~~~~~~~~~~~~~~~~~
  CC [M]  drivers/w1/masters/ds1wm.o
make[3]: *** [/home/pilseong/practice/kernel/linux/scripts/Makefile.build:289: drivers/ata/libahci.o] Error 1
make[2]: *** [/home/pilseong/practice/kernel/linux/scripts/Makefile.build:552: drivers/ata] Error 2

 

2. 20.04를 설치해서 사용해야 가능함. 빌드할 커널과 유사한 버전의 리눅스에서 빌드해야 빌드 실패를 줄일 수 있다. 라이브러리 호환성 문제로 빌드가 되지 않는 경우가 아주 많다.

 

3. 최신 x86버전을 라즈베리 4에 설치했는데, 빌드를 보니 64비트가 설치되어 있는 황당한 경우가 있었다. 빌드 시에 아키텍처 확인이 필수

 

4. 20년 5월 빌드를 설치하면 wifi 가 붙었다가 떨어지는 문제가 있다. 2020년 12월 버전의 경우 문제가 발생하지 않은다(커널 5.15)

Index of /raspios_armhf/images/raspios_armhf-2020-12-04 (raspberrypi.com)

 

5. 커널을 install 할 때 빌드한 zImage 파일을 라즈베리 microSD에 복사해야 한다. 아래의 경우는 boot 파티션이 sda1으로 되어 있다. 커널을 빌드할 경우 zImage라는 이미지가 생성되는데 32비트의 경우 zImage, 64비트의 경우 Image를 생성한다.

 

pilseong@pilseong-Standard-PC-Q35-ICH9-2009:~/practice/kernel/out$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0    7:0    0     4K  1 loop /snap/bare/5
loop1    7:1    0  63.3M  1 loop /snap/core20/1828
loop2    7:2    0 346.3M  1 loop /snap/gnome-3-38-2004/119
loop3    7:3    0    46M  1 loop /snap/snap-store/638
loop4    7:4    0  49.9M  1 loop /snap/snapd/18357
loop5    7:5    0  91.7M  1 loop /snap/gtk-common-themes/1535
loop6    7:6    0  38.8M  1 loop /snap/snapd/21759
loop7    7:7    0    64M  1 loop /snap/core20/2318
loop8    7:8    0 349.7M  1 loop /snap/gnome-3-38-2004/143
sda      8:0    1  29.7G  0 disk 
├─sda1   8:1    1   256M  0 part /media/pilseong/boot
└─sda2   8:2    1  29.5G  0 part /media/pilseong/rootfs
sr0     11:0    1  1024M  0 rom  
vda    252:0    0   100G  0 disk 
├─vda1 252:1    0   512M  0 part /boot/efi
├─vda2 252:2    0     1K  0 part 
└─vda5 252:5    0  99.5G  0 part /

 

  5-1 하고 싶은 말은 boot 파티션에는 여러 버전의 kernel.img가 있을 경우가 많다. 라즈베리 4B 같은 경우 32비트의 확장인터페이스를 지원하므로 kernel7l.img 파일이 부팅시에 사용되므로 아래처럼 zImage를 kernel7l.img 로 복사해야 정상적인 커널이 사용된다.

 

pilseong@pilseong-Standard-PC-Q35-ICH9-2009:~/practice/kernel/out$ sudo cp mnt/boot/kernel7l.img mnt/boot/kernel7l-backup.img
pilseong@pilseong-Standard-PC-Q35-ICH9-2009:~/practice/kernel/out$ ll arch/arm/boot/
total 22580
drwxrwxr-x  4 pilseong pilseong     4096  6월 16 10:45 ./
drwxrwxr-x 15 pilseong pilseong     4096  6월 16 10:39 ../
drwxrwxr-x  2 pilseong pilseong     4096  6월 16 10:45 compressed/
drwxrwxr-x  3 pilseong pilseong    12288  6월 16 10:37 dts/
-rwxrwxr-x  1 pilseong pilseong 22360140  6월 16 10:45 Image*
-rw-rw-r--  1 pilseong pilseong      109  6월 16 10:45 .Image.cmd
-rwxrwxr-x  1 pilseong pilseong  7070472  6월 16 10:45 zImage*
-rw-rw-r--  1 pilseong pilseong      136  6월 16 10:45 .zImage.cmd
pilseong@pilseong-Standard-PC-Q35-ICH9-2009:~/practice/kernel/out$ sudo cp arch/arm/boot/zImage mnt/boot/kernel7l.img
pilseong@pilseong-Standard-PC-Q35-ICH9-2009:~/practice/kernel/out$ sudo umount mnt/boot
pilseong@pilseong-Standard-PC-Q35-ICH9-2009:~/practice/kernel/out$ sudo umount mnt/root
728x90
댓글