Copyright (C) 커널연구회 (www.kernel.bz)작성자: 정재준(rgbi3307 골뱅이 nate.com)문서위치 메인(출처): https://www.kernel.bz/blogPost/kernel-diff-v6-12아래 내용은 누구나 사용할 수 있습니다. 저자정보는 지우지 말고 위의 출처를 기입해 주시기 바랍니다.커널 버전 [v6.12) kernel.org의 리눅스 커널 소스 배포 이력을 보면, LTS(LongTerm 버전 소스)는 아래와 같이 1년 정도의 주기로 지정 되고 있습니다. 2021년 10월에 v5.15가 배포 되었고, 2022년 12월에 v6.1, 2023년 10월에 v6.6, 2024년 11월에 v6.12가 배포 되었습니다. LongTerm 버전은 소스 패치를 꾸준히 올리는 버전이기 때문에 커널 소스를 선정 하실때 LongTerm 버전을 선택하는 것을 추천 드립니다. 필자도 v6.6 기준으로 작업 하다가 최근에 v6.12을 분석하기 시작 했습니다. LongTerm 버전 배포 이력 https://www.kernel.org/pub/linux/kernel/v5.x/ linux-5.15.tar.gz 31-Oct-2021 21:54 186M https://www.kernel.org/pub/linux/kernel/v6.x/ linux-6.1.tar.gz 12-Dec-2022 05:58 206M linux-6.6.tar.gz 30-Oct-2023 06:14 214M linux-6.12.tar.gz 18-Nov-2024 04:49 229M v6.6에서 v6.12로 버전업 되면서 커널 소스가 전체적으로 변경된 비율을 git diff 명령 옵션으로 확인해 보면 다음과 같습니다.전체 소스 변경 사항(변화 비율) $ git diff v6.6 v6.12 --dirstat=files 5.9% Documentation/devicetree/bindings/ 3.3% Documentation/ 3.2% arch/arm/ 3.5% arch/arm64/boot/dts/ 9.7% arch/ 3.2% drivers/gpu/drm/amd/ 6.4% drivers/gpu/drm/ 3.6% drivers/net/ethernet/ 4.0% drivers/net/ 27.2% drivers/ 4.4% fs/ 5.0% include/ 3.9% sound/ 4.5% tools/testing/selftests/ 4.4% tools/ 리눅스 커널 소스는 계속 기능 추가되고 있는 하드웨어 자원들을 지원하는 방향으로 버전업 되므로, arch(CPU) 관련 소스와 drivers(디바이스 드라이버) 소스에서 변경 사항이 가장 많습니다. 드라이버 소스들 중에서도 gpu와 net 관련해서 상대적으로 변화율이 높습니다. 그리고 fs(파일 시스템)가 변화율이 높고, 구조체를 코딩해둔 include와 커널 소스를 테스트하는 tools 소스에서 변화율이 높은 편입니다. arch(CPU) 소스 변경사항arch(CPU) 관련 소스는 다음과 같이 git diff 명령 옵션으로 확인해 보면, arm과 arm64에서 변경 사항이 가장 많고, x86과 powerpc 쪽에서 변화율이 높은 편입니다. 필자가 관심 가지고 있는 riscv는 5.4%의 변화율을 보이고 있습니다.arch 소스 변경 사항(변화 비율) $ git diff v6.6 v6.12 --dirstat=files arch/ 3.0% arch/arm/boot/dts/nxp/imx/ 10.9% arch/arm/boot/dts/ 5.4% arch/arm/ 3.9% arch/arm64/boot/dts/freescale/ 4.6% arch/arm64/boot/dts/qcom/ 12.8% arch/arm64/boot/dts/ 4.9% arch/arm64/ 4.1% arch/ia64/ 5.1% arch/mips/ 8.9% arch/powerpc/ 5.4% arch/riscv/ 4.4% arch/s390/ 11.1% arch/x86/ 14.8% arch/ arch(CPU) 관련 소스는 Device Tree 관련 소스 변화율을 보면 CPU 제조사별로 변경 사항들을 좀 더 구체적으로 확인할 수 있습니다. arm(32비트)은 아래와 같이 nxp가 가장 변경 사항이 많고 ti, st, qcom 순으로 우리가 가장 많이 알고 접하는 CPU 제조사가 역시 가장 활발히 버전업하고 있습니다.arm DeviceTree 소스 변경 사항(변화 비율) $ git diff v6.6 v6.12 --dirstat=files arch/arm/boot/dts 5.7% arch/arm/boot/dts/allwinner/ 4.6% arch/arm/boot/dts/aspeed/ 6.8% arch/arm/boot/dts/broadcom/ 8.0% arch/arm/boot/dts/marvell/ 21.9% arch/arm/boot/dts/nxp/imx/ 3.5% arch/arm/boot/dts/nxp/ 8.3% arch/arm/boot/dts/qcom/ 3.8% arch/arm/boot/dts/renesas/ 8.4% arch/arm/boot/dts/st/ 8.5% arch/arm/boot/dts/ti/omap/ 20.0% arch/arm/boot/dts/ arm64(64비트)은 아래와 같이 qcom이 가장 변경 사항이 많고 freescale, rockchip, ti 순으로 우리가 가장 많이 접하는 CPU 제조사가 역시 가장 활발히 버전업하고 있습니다.arm64 DeviceTree 소스 변경 사항(변화 비율) $ git diff v6.6 v6.12 --dirstat=files arch/arm64/boot/dts 3.2% arch/arm64/boot/dts/allwinner/ 6.5% arch/arm64/boot/dts/amlogic/ 18.4% arch/arm64/boot/dts/freescale/ 7.2% arch/arm64/boot/dts/mediatek/ 21.6% arch/arm64/boot/dts/qcom/ 5.5% arch/arm64/boot/dts/renesas/ 12.5% arch/arm64/boot/dts/rockchip/ 10.3% arch/arm64/boot/dts/ti/ 14.3% arch/arm64/boot/dts/ 필자가 관심 가지고 있는 riscv는 arm에 비해서는 제조사가 그렇게 많지는 않지만, allwinner, starfive, microchip 순으로 소스 변화율이 높습니다. 특히 starfive는 중국에 있는 제조사 입니다. riscv 제조사 원천은 미국에 있는 sifive 이지만, 최근 들어서 중국 업체들이 riscv CPU를 가성비 있게 만들어 내고 있고 커널 소스도 많이 지원하는 추세 입니다.riscv DeviceTree 소스 변경 사항(변화 비율) $ git diff v6.6 v6.12 --dirstat=files arch/riscv/boot/dts 25.7% arch/riscv/boot/dts/allwinner/ 12.1% arch/riscv/boot/dts/canaan/ 13.6% arch/riscv/boot/dts/microchip/ 4.5% arch/riscv/boot/dts/renesas/ 6.0% arch/riscv/boot/dts/sifive/ 13.6% arch/riscv/boot/dts/sophgo/ 16.6% arch/riscv/boot/dts/starfive/ 6.0% arch/riscv/boot/dts/thead/ kernel 소스 변경 사항리눅스 커널 소스중에서 kernel 경로에 있는 소스가 핵심 입니다. 스케쥴러, 인터럽트, 락킹, 시간, dma, trace 관련 소스들이 이 경로에 코딩되어 있습니다. 필자가 가장 많이 관심을 가지고 있는 부분이기도 합니다. kernel 소스 변경 사항(변화 비율) $ git diff v6.6 v6.12 --dirstat=files kernel/ 12.4% kernel/bpf/ 3.7% kernel/dma/ 4.2% kernel/irq/ 5.2% kernel/locking/ 5.2% kernel/rcu/ 8.2% kernel/sched/ 7.1% kernel/time/ 12.6% kernel/trace/ 41.0% kernel/ kernel 경로에 있는 스케쥴러 소스 파일들의 변경 사항을 좀 더 구체적으로 확인해 보면 다음과 같습니다.scheduler 소스 변경 사항(변화 비율) $ git diff v6.6 v6.12 --compact-summary kernel/sched/ kernel/sched/autogroup.c | 1 kernel/sched/build_policy.c | 12 kernel/sched/build_utility.c | 1 kernel/sched/clock.c | 4 kernel/sched/core.c | 3313 kernel/sched/core_sched.c | 2 kernel/sched/cpudeadline.c | 2 kernel/sched/cpufreq_schedutil.c | 214 kernel/sched/cputime.c | 33 kernel/sched/deadline.c | 989 kernel/sched/debug.c | 227 kernel/sched/ext.c (new) | 7272 kernel/sched/ext.h (new) | 91 kernel/sched/fair.c | 2479 kernel/sched/features.h | 32 kernel/sched/idle.c | 93 kernel/sched/isolation.c | 18 kernel/sched/loadavg.c | 6 kernel/sched/membarrier.c | 19 kernel/sched/pelt.c | 48 kernel/sched/pelt.h | 21 kernel/sched/psi.c | 163 kernel/sched/rt.c | 398 kernel/sched/sched.h | 1038 kernel/sched/stats.c | 15 kernel/sched/stats.h | 61 kernel/sched/stop_task.c | 35 kernel/sched/syscalls.c (new) | 1635 kernel/sched/topology.c | 325 kernel/sched/wait.c | 60 kernel/sched/wait_bit.c | 4 ext 스케쥴러(Extensible Scheduling Class)와 syscalls.c는 v6.12에 새롭게 추가된 스케쥴러 입니다. drivers 소스 변경 사항커널 소스에서 디바이스 드라이버에 관련되는 소스가 가장 많이 변경 됩니다. 디바이스에 관련되는 소스는 장치 제조사별로 수시로 업데이트 되기 때문에 LongTerm 버전은 패치를 꾸준히 올림니다. 아래에서 gpu가 가장 변경 사항이 많고, net, media, clk 순으로 변화율이 높습니다. drivers 소스 변경 사항(변화 비율) $ git diff v6.6 v6.12 --dirstat=files drivers/ 3.5% drivers/clk/ 3.5% drivers/gpu/drm/amd/display/dc/ 3.6% drivers/gpu/drm/amd/ 14.3% drivers/gpu/drm/ 5.9% drivers/media/ 8.2% drivers/net/ethernet/ 5.9% drivers/net/wireless/ 3.1% drivers/net/ 3.6% drivers/staging/ 47.8% drivers/ 소스 변경에 관한 좀더 구체적인 내용은 위의 소스 변경 이력을 보고 소스 파일을 단계적으로 하나씩 분석해 봐야 합니다. 이것은 시간이 많이 걸리는 작업 이므로, 관심 가지고 작업하고 있는 소스부터 하나씩 분석하는 과정이 필요 합니다. 소스 분석 내용은 주제별로 꾸준히 올려 보도록 하겠습니다.감사합니다.