2024.02.15 (목)
디렉토리 생성 및 이동
ubuntu@ubuntu09:~/pi_bsp$ mkdir kernel ; cd kernel
ubuntu@ubuntu09:~/pi_bsp/kernel$ ls
ubuntu@ubuntu09:~/pi_bsp/kernel$
ubuntu@ubuntu09:~/pi_bsp/kernel$ sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev
ubuntu@ubuntu09:~/pi_bsp/kernel$ git clone --depth=1 -b rpi-6.1.y https://github.com/raspberrypi/linux
ubuntu@ubuntu09:~/pi_bsp/kernel$ tar cvf linux.tar linux
ubuntu@ubuntu09:~/pi_bsp/kernel$ gzip linux.tar
ubuntu@ubuntu09:~/pi_bsp/kernel$ ls -l
total 462388
drwxrwxr-x 28 ubuntu ubuntu 4096 2월 15 09:50 linux
-rw-rw-r-- 1 ubuntu ubuntu 473478558 2월 15 09:59 linux.tar.gz
ubuntu@ubuntu09:~/pi_bsp/kernel$ cp linux.tar.gz linux.tar.gz_org
압축 풀기
ubuntu@ubuntu09:~/pi_bsp/kernel$ gzip -d linux.tar.gz
압축률이 더 높음
ubuntu@ubuntu09:~/pi_bsp/kernel$ bzip2 linux.tar
확실히 사이즈가 줄었다
ubuntu@ubuntu09:~/pi_bsp/kernel$ ls -l
total 868560
drwxrwxr-x 28 ubuntu ubuntu 4096 2월 15 09:50 linux
-rw-rw-r-- 1 ubuntu ubuntu 415911238 2월 15 09:59 linux.tar.bz2
-rw-rw-r-- 1 ubuntu ubuntu 473478558 2월 15 10:02 linux.tar.gz_org
ubuntu@ubuntu09:~/pi_bsp/kernel$ mv linux.tar.gz_org linux.tar.gz
ubuntu@ubuntu09:~/pi_bsp/kernel$ ls -l
total 868560
drwxrwxr-x 28 ubuntu ubuntu 4096 2월 15 09:50 linux
-rw-rw-r-- 1 ubuntu ubuntu 415911238 2월 15 09:59 linux.tar.bz2
-rw-rw-r-- 1 ubuntu ubuntu 473478558 2월 15 10:02 linux.tar.gz
ubuntu@ubuntu09:~/pi_bsp/kernel/linux$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_defconfig
ubuntu@ubuntu09:~/pi_bsp/kernel/linux$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
ubuntu@ubuntu09:~/pi_bsp/kernel/linux$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j4
컴퓨터 시스템의 전반적인 동작을 제어하고 조정하는 시스템 프로그램들의 집합
하드웨어와 응용 프로그램 간의 인터페이스 역할을 하면서 CPU, 주기억장치, 입출력 장치 등의 컴퓨터 자원을 관리
공개된 리눅스 커널과 각종 응용 프로그램 소스를 임베디드 시스템에서 동작하도록 최적화하여 사용하는 운영체제
bootfs: 커널, rootfs: 디바이스 드라이버 복사하는 용
SD 카드 빼서 PC에 연결하기
ubuntu@ubuntu09:~/pi_bsp/kernel/linux$ df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 4023340 0 4023340 0% /dev
tmpfs 812812 3016 809796 1% /run
/dev/sda5 153188848 22517616 122816896 16% /
tmpfs 4064056 0 4064056 0% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 4064056 0 4064056 0% /sys/fs/cgroup
/dev/loop0 128 128 0 100% /snap/bare/5
/dev/loop1 64896 64896 0 100% /snap/core20/1828
/dev/loop2 75904 75904 0 100% /snap/core22/1033
/dev/loop3 508928 508928 0 100% /snap/gnome-42-2204/141
/dev/loop8 51072 51072 0 100% /snap/snapd/18357
/dev/loop4 354688 354688 0 100% /snap/gnome-3-38-2004/119
/dev/loop6 12672 12672 0 100% /snap/snap-store/959
/dev/loop5 93952 93952 0 100% /snap/gtk-common-themes/1535
/dev/loop7 65536 65536 0 100% /snap/core20/2105
/dev/loop11 41472 41472 0 100% /snap/snapd/20671
/dev/loop9 358144 358144 0 100% /snap/gnome-3-38-2004/143
/dev/loop10 47104 47104 0 100% /snap/snap-store/638
/dev/sda1 523248 4 523244 1% /boot/efi
tmpfs 812808 24 812784 1% /run/user/1000
/dev/loop12 76032 76032 0 100% /snap/core22/1122
/dev/sdb1 522232 116302 405930 23% /media/ubuntu/bootfs
/dev/sdb2 30082132 4706984 23826856 17% /media/ubuntu/rootfs
~/pi_bsp/kernel/linux$ sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/media/ubuntu/rootfs modules_install
/dev/sdb2 -> /media/ubuntu/rootfs 경로가 맞는지 확인하고 INSTALL_MOD_PATH 수정해주기
확장자 ko는 커널 오브젝트라는 뜻
ubuntu@ubuntu09:~/pi_bsp/kernel/linux$ sudo cp /media/ubuntu/bootfs/kernel7l.img /media/ubuntu/bootfs/kernel7l-backup.img
sudo mv /media/ubuntu/bootfs/kernel7l.img /media/ubuntu/bootfs/kernel7l-backup.img
ubuntu@ubuntu09:~/pi_bsp/kernel/linux$ ls -l arch/arm/boot/zImage
-rwxrwxr-x 1 ubuntu ubuntu 7458816 2월 15 10:39 arch/arm/boot/zImage
이것이 커널 이미지이다.
ubuntu@ubuntu09:~/pi_bsp/kernel/linux$ sudo cp arch/arm/boot/zImage /media/ubuntu/bootfs/kernel7l.img
ubuntu@ubuntu09:~/pi_bsp/kernel/linux$ ls -l /media/ubuntu/bootfs/kernel7l.img
-rw-r--r-- 1 ubuntu ubuntu 7458816 2월 15 11:37 /media/ubuntu/bootfs/kernel7l.img
ubuntu@ubuntu09:~/pi_bsp/kernel/linux$ sudo cp arch/arm/boot/dts/*.dtb /media/ubuntu/bootfs/
ubuntu@ubuntu09:~/pi_bsp/kernel/linux$ sudo cp arch/arm/boot/dts/overlays/*.dtb* /media/ubuntu/bootfs/overlays/
ubuntu@ubuntu09:~/pi_bsp/kernel/linux$ sudo cp arch/arm/boot/dts/overlays/README /media/ubuntu/bootfs/overlays/
ubuntu@ubuntu09:~/pi_bsp/kernel/linux$ sudo vi /media/ubuntu/bootfs/config.txt
맨 아랫줄에 추가해주기
arm_64bit=0
pi@pi09:~ $ sudo vi /boot/firmware/config.txt
들어가서 주석 처리해주기
pi@pi09:~ $ uname -a
Linux pi09 6.1.77-v7l+ #1 SMP Thu Feb 15 10:39:29 KST 2024 armv7l GNU/Linux
6.1.0이었는데 77로 바뀌고 빌드한 시간으로 바꼈다.
pi@pi09:~ $ lsmod
Module Size Used by
snd_seq_dummy 16384 0
snd_hrtimer 16384 1
snd_seq 73728 7 snd_seq_dummy
snd_seq_device 16384 1 snd_seq
rpcsec_gss_krb5 28672 0
bnep 20480 2
brcmfmac 344064 0
brcmutil 20480 1 brcmfmac
hci_uart 40960 0
btbcm 20480 1 hci_uart
binfmt_misc 20480 1
cfg80211 835584 1 brcmfmac
bluetooth 532480 12 hci_uart,bnep,btbcm
ecdh_generic 16384 1 bluetooth
rpivid_hevc 45056 0
ecc 40960 1 ecdh_generic
bcm2835_codec 49152 0
rfkill 32768 6 bluetooth,cfg80211
snd_bcm2835 24576 1
bcm2835_isp 32768 0
bcm2835_v4l2 49152 0
bcm2835_mmal_vchiq 36864 3 bcm2835_isp,bcm2835_codec,bcm2835_v4l2
v4l2_mem2mem 40960 2 rpivid_hevc,bcm2835_codec
videobuf2_dma_contig 20480 3 rpivid_hevc,bcm2835_isp,bcm2835_codec
videobuf2_vmalloc 16384 1 bcm2835_v4l2
raspberrypi_hwmon 16384 0
snd_pcm 126976 1 snd_bcm2835
videobuf2_memops 16384 2 videobuf2_dma_contig,videobuf2_vmalloc
videobuf2_v4l2 32768 5 rpivid_hevc,bcm2835_isp,bcm2835_codec,bcm2835_v4l2,v4l2_mem2mem
snd_timer 36864 3 snd_seq,snd_hrtimer,snd_pcm
raspberrypi_gpiomem 16384 0
snd 94208 9 snd_seq,snd_timer,snd_seq_device,snd_bcm2835,snd_pcm
videobuf2_common 65536 9 rpivid_hevc,bcm2835_isp,bcm2835_codec,videobuf2_dma_contig,videobuf2_vmalloc,videobuf2_memops,bcm2835_v4l2,v4l2_mem2mem,videobuf2_v4l2
vc_sm_cma 36864 2 bcm2835_isp,bcm2835_mmal_vchiq
videodev 270336 7 rpivid_hevc,bcm2835_isp,bcm2835_codec,videobuf2_common,bcm2835_v4l2,v4l2_mem2mem,videobuf2_v4l2
mc 57344 7 rpivid_hevc,bcm2835_isp,bcm2835_codec,videobuf2_common,videodev,v4l2_mem2mem,videobuf2_v4l2
nvmem_rmem 16384 0
uio_pdrv_genirq 16384 0
uio 24576 1 uio_pdrv_genirq
i2c_dev 16384 0
fuse 135168 1
drm 548864 0
drm_panel_orientation_quirks 16384 1 drm
backlight 20480 1 drm
dm_mod 139264 0
nfsd 516096 5
ip_tables 28672 0
x_tables 36864 1 ip_tables
ipv6 536576 74
이렇게 뜨면 잘 올라 와 있는 것
1. 이미지 가져오기
교수님이 준비하신 이미지 중 하나를 복사해서 가져왔다
ubuntu@ubuntu09:~/pi_bsp/kernel$ cp /srv/samba/logo_image/005.jpg .
ubuntu@ubuntu09:~/pi_bsp/kernel$ eog 005.jpg
명령어를 치면 이렇게 사진이 뜬다
2. gimp 다운받기
ubuntu@ubuntu09:~/pi_bsp/kernel$ sudo apt install gimp
gimp 실행하기
ubuntu@ubuntu09:~/pi_bsp/kernel$ gimp
파일 > 열기 > 005.jpg 선택 > Keep
이미지 위에서 마우스 오른쪽 클릭하고 이미지 > 변형 > 반시계 90도로 돌리기
마우스 우클릭 > 이미지 > 이미지 비율 조정 > 사슬 끊고 800*480으로 맞춰주기
반드시 800, 480이어야 함 !
Text 넣는 건 자유로 넣기
파일 > Export As > 파일 유형 선택 > PPM 이미지
내보내기 클릭 > Ascii 선택 > 내보내기
3. 변환 툴 설치
ubuntu@ubuntu09:~/pi_bsp/kernel$ sudo apt install netpbm
4. 커널 사용 이미지 변환
ppm 800x480 이미지 준비 후 (gimp)
ubuntu@ubuntu09:~/pi_bsp/kernel$ pnmquant -fs 224 005.ppm > logo_kcci_224.ppm
ubuntu@ubuntu09:~/pi_bsp/kernel$ pnmnoraw logo_kcci_224.ppm > logo_kcci_clut224.ppm
5. 복사 및 메뉴 편집
ubuntu@ubuntu09:~/pi_bsp/kernel$ cp logo_kcci_clut224.ppm linux/drivers/video/logo/
5-1. Kconfig 수정하기
vi linux/drivers/video/logo/Kconfig
아래 코드 맨 밑(71번째 줄)에 추가하기
config LOGO_KCCI_CLUT224
bool "kcci 224-color Linux logo"
depends on LOGO
default y
5-2. Makefile 수정하기
vi linux/drivers/video/logo/Makefile
16 번째 줄에 추가하기
16 obj-$(CONFIG_LOGO_KCCI_CLUT224) += logo_kcci_clut224.o
5-3. logo.c 수정하기
vi linux/drivers/video/logo/logo.c
103번 줄에 추가하기
103 #ifdef CONFIG_LOGO_KCCI_CLUT224
104 logo = &logo_kcci_clut224;
105 #endif
5-4. linux_logo.h 수정하기
ubuntu@ubuntu09:~/pi_bsp/kernel$ vi linux/include/linux/linux_logo.h
extern const struct linux_logo logo_kcci_clut224;
6. 커널 옵션 수정하기
ubuntu@ubuntu09:~/pi_bsp/kernel/linux$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
kcci 224-color Linux logo (NEW)만 * 남겨 놓고 저장 종료
ubuntu@ubuntu09:~/pi_bsp/kernel/linux$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage -j4
7. 커널 이미지 타겟(pi) 보드로 전송
ubuntu@ubuntu09:~/pi_bsp/kernel/linux$ cp arch/arm/boot/zImage /srv/nfs/
8. 타겟 보드 터미널에서 커널이미지 sd카드로 복사 및 재부팅
pi@pi09:~ $ cd /mnt/ubuntu_nfs/
pi@pi09:/mnt/ubuntu_nfs $ sudo cp zImage /boot/firmware/kernel7l.img
pi@pi09:/mnt/ubuntu_nfs $ sync