dynamic linking을 공부하다가 좀 지겨워서 kernel도 조금씩 공부하려고 하고 있다.
lkmpg를 읽고 있는데 아래와 같은 assembly source가 있다고 한다.
arch/$(architecture)/kernel/entry.S
Bootlin에 가서 arch/x86/kernel/entry.S에 있는 줄 알았는데 없어졌다. 자세한 내용은 모르겠지만, userspace에서 int 0x80, syscall 등의 instruction을 실행하면 실제 entry.S에 있는 code를 통해서 syscall이 trigger 되는 것 같다.
$ uname -a
Linux ubuntu 6.17.0-35-generic #35~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Tue May 26 19:30:42 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
그러나 최근에 update를 통해서 6.17.0.40으로 kernel version이 올라갔는데, kernel이 바뀌면서 wifi/bluetooth driver도 업데이트를 해야 된다.
문제는 wifi/bluetooth chip 제조사(realtek)에서 이러한 kernel update에 따른 driver 수정을 해야 되는데 Intel을 제외한 나머지 회사들은 그다지 driver update에 관심이 없는 것 같다.
아무래도 kernel driver를 수정하는 programmer을 고용해서 추가적으로 비용이 발생해서 그런 듯하다.
일단 Wifi/bluetooth가 연결되지 않는다면 높은 확률로 kernel version이 올라갔을 것이다.
Grub에서 Advanced options for Ubuntu를 선택하면 upgrade 된 kernel과 이전 kernel이 있을 것이다.
이때 이전 kernel을 선택한다. 만약 해당 kernel로 booting을 해서 wifi/bluetooth가 있다면 kernel update를 하지 않도록 kernel version을 고정시키는 것이 좋다.
dpkg --get-selections 으로는 kernel version을 확인할 수 있다. 현재 설치되어 있는 kernel과 hardware environment (hwe)를 보여준다.
askubuntu 에서는 hwe를 지우지 말라고 하는데 삭제하지 않으면 자동적으로 6.17.0-40 kernel을 load 해서 나의 경우에는 삭제해 버렸다.
그다음에는 apt-mark hold로 사용할 kernel을 자동으로 upgrade/install 하지 않게 hold 할 수 있다.
나의 경우 hwe도 hold 하기로 했다.
$ sudo apt-mark hold linux-image-6.17.0-35-generic
linux-image-6.17.0-35-generic set on hold.
sudo apt-mark hold linux-image-generic-hwe-24.04
linux-image-generic-hwe-24.04 set on hold.
apt-mark로 hold를 하고 나서 다시 dpkg --get-selections를 하면 확실히 결과가 바뀌었다.
apt, dpkg 모두 man page가 있고 심지어는 apt-mark도 있으니 한 번 읽어보자.
참고로 Realtek이 이런 driver에 인식하니 웬만하면 Wifi chip은 Intel AX 210 처럼 좀 유명한 거를 쓰는 게 좋고 그거보다 더 좋은 선택지는 lan card를 쓰는 것이다.
그러면 Wifi 문제가 아예 사라지기 때문이다. 슬프게도 우리 집은 여건상 내 방에 랜선을 꼽을 수가 없다. 참 안타깝다...
어쨌든 이 상태에서 재부팅을 하면 원래 상태로 잘 동작을 하지 않고 계속 6.17.0-40을 사용한다...
그럴 때에는 6.17.0-35나 wifi 접속이 가능한 kernel version으로 부팅을 하고 sudo /etc/default/grub으로 아래 두 줄을 추가한다.
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
vim, nano 등을 이용하여 저장하고 sudo update-grub 으로 grub을 update 한다.
아마 이 정도만 해도 6.17.0-35를 선택하여 부팅할 텐데 6.17.0-40이 문제를 일으킬까 봐 삭제를 하기로 하였다.
이렇게 하면 아예 Advanced options for Ubuntu에서 6.17.0-40이 뜨지를 않는다.
그러나 단점이 하나 있는데 바로 sudo apt-get upgrade를 하면 문제가 생긴다는 것이다.
이 외에도 brave가 작동은 잘 하지만 오른쪽 상단 bar에 an error occurred please run the package manager... 라고 뜬다.
아직 완벽하게 고치지는 않았지만 일단은 여기까지.
7월 18일
오늘은 gdb 강의를 들으면서 gcc/clang으로 같은 source code를 compile 보는 것이 debugging에 좋다고 해서 clang을 설치하려고 했다.
그러나 지난번에 6.17.0-35를 apt-mark로 hold 해서 인지 6.17.0-40과 hwe에 dependency가 있어서 설치하지 못하였다.
apt-mark hold를 하면 새로운 packages를 설치하거나 update 하지 못하니 좋은 방법은 전혀 아닌 것 같다. 그리하여 다시 apt-mark를 unhold 하고 다시 sudo apt-get full upgrade로 kernel을 다시 update 했다.
그랬더니 6.17.0-35에서 6.17.0-40이 아닌 7점대 7.0.0-28 kernel로 올라갔다.
장점은 7.0.0-28에서는 wifi/bluetooth 모두 잘 됐다. ibus에서 한/영 전환만 잘 안 됐는데 아래의 command로 해결했다.
오른쪽 alt 키로 한/영 전환을 하는데 Hangul/alt_r이 아닌 ISO_shift_level3으로 인식을 해서 강제로 바꿔줬다.
gsettings get org.gnome.desktop.input-sources xkb-options
gsettings set org.gnome.desktop.input-sources xkb-options "['lv3:ralt_alt']"
추가로 아래의 command 까지 실행해야지 Hangul key를 입력해도 막 스크린샷이 찍히거나 browser의 hamburger 키가 눌리지 않는다.
gsettings set org.gnome.desktop.input-sources xkb-options "['korean:ralt_hangul', 'korean:rctrl_hanja']"
terminal에서 이런 결과가 나와야 된다.
$ gsettings get org.gnome.desktop.input-sources xkb-options
['korean:ralt_hangul', 'korean:rctrl_hanja']
Realtek 같은 chip manufacturer 들이 LTS kernel version들은 발 빠르게 driver를 짜주는데, 중간에 단계인 version들은 무시하는 것 같다. 약간 glibc 2.31(Ubuntu 20.04), 2.35(Ubuntu 22.04), 2.39(Ubuntu 24.04), 2.43(Ubuntu 26.04)은 모두가 사용하지만 그 사이사이에 있는 버전들은 사람들이 잘 안 쓰는 거랑 비슷한 논리가 아닐까 싶다.
핸드폰은 heic(heif) format이 기본 사진 format이다. heic는 블로그에 안 보여서, png로 바꾸고 싶었다.
libhelf-examples를 사용하면 heic to png가 된다고 해서 package를 설치하려고 했으나 자꾸 error가 떴다
$ sudo apt install aptitude libheif-examples
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
aptitude is already the newest version (0.8.13-5ubuntu5).
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
libheif-examples : Depends: libheif1 (= 1.17.6-1ubuntu4.2) but 1.17.6-1ubuntu4.3 is to be installed
E: Unable to correct problems, you have held broken packages.
sudo apt upgrade, update, clean 등 이것저것 해봤지만 아무것도 해결을 하지 못했다.
이럴 때에는 그냥 Imagemagick의 convert command를 쓰면 된다. 이러면 png 파일로 손쉽게 바꿀 수 있다.
WARN deprecated: project config key languageCode was deprecated in Hugo v0.158.0 and will be removed in a future release. Use locale instead.
WARN deprecated: .Language.LanguageDirection was deprecated in Hugo v0.158.0 and will be removed in a future release. Use .Language.Direction instead.
WARN deprecated: .Language.LanguageCode was deprecated in Hugo v0.158.0 and will be removed in a future release. Use .Language.Locale instead.
Hugo version은 0.161.1이다.
$ hugo version
hugo v0.161.1-ea8f66a7ce988664dcc84c052fc96757042e2e4a+extended linux/amd64 BuildDate=2026-04-29T13:56:01Z VendorInfo=snap:0.161.1