최소 Linux 커널은 어떻게 생성해야 합니까?

최소 Linux 커널은 어떻게 생성해야 합니까?

저는 임베디드 Linux 시스템(5.10.24)을 개발 중이고 이제 구축할 수 있는 가장 작은 커널이 무엇인지 확인하고 싶습니다. 따라서 커널 구성이 많아 이제 다음과 같은 커널이 생겼습니다.

# dmesg | grep 'Memory:'
Memory: 12620K/16384K available (1933K kernel code, 128K rwdata, 236K rodata, 192K init, 55K bss, 3764K reserved, 0K cma-reserved)

# free
              total        used        free      shared  buff/cache   available
Mem:          12812        2624        8808           0        1380        8928
Swap:             0           0           0

sysfs드라이버 와 같은 일부 중요한 커널 코드를 비활성화했습니다 .
따라서 현재 커널 메모리 사용량을 줄이기 위해 커널 구성을 최적화할 수 없습니다.

이것은 MMU가 있는 MPU에서 실행되는 일반적인 커널이므로 현재로서는 uCLinux로 이동하지 않을 것입니다.

다음으로 커널 코드를 비활성화하거나 단순화하여 코드를 수동으로 변경할 수 있습니다. 하지만 그 전에 먼저 다른 기능보다 메모리를 많이 사용하는 커널 기능을 좁혀보고 싶습니다.

그럼 어떤 코드에 먼저 집중해야 할지 제안해 주실 수 있나요? 커널의 어느 부분이 더 많은 메모리를 차지하고 주의를 기울여야 하는지 파악하는 데 도움이 되는 도구가 있습니까?

답변1

최소한의 Linux 커널을 생성하는 방법을 찾았습니다.
여기있어.

  1. make menuconfig많은 구성을 완료하고 사용하지 않거나 필요하지 않은 것을 비활성화하려면 일반적이고 일반적인 방법으로 실행하십시오 risk-less. 변경 사항이 예상대로 작동하는지 확인하려면 커널을 빌드하고 시작하는 것을 잊지 마십시오.

  2. sysfs, procfs및 와 같은 메모리 집약적 커널 구성 요소를 비활성화합니다 printk. 이 변경으로 인해 커널 공간이 크게 줄어들지만 이로 인해 특정 기능이 제대로 작동하지 못할 수 있습니다 free.psmountprocfs

  3. 부트로더에서 커널 매개변수를 사용자 정의하여 메모리를 덜 사용하도록 특정 커널 기능을 비활성화하거나 설정합니다.

  4. readelf어떤 기능과 데이터가 메모리를 차지하고 있는지 확인하는 데 사용됩니다 . IRQ 수 등 특정 하드웨어 플랫폼에 따라 일부 기능을 단순화하도록 커널 코드를 변경합니다.

커널 이미지는 변경이 있을 때마다 빌드하고 테스트해야 합니다.

반복적인 시도를 거친 후 최종 커널 이미지는 다음과 같습니다.

-rw-rw-r-- 1 t    t      972961 Nov 29 22:09 vmlinuz

text    data     bss     dec     hex
1860928  242232   28032 2131192  2084f8

# free
              total        used        free      shared  buff/cache   available
Mem:           5620        2140        2188           0        1292        2660
Swap:             0           0           0

sh가 비활성화된 경우

paladin의 의견에 따라 커널에서 "sh"를 비활성화하고 결과를 비교했습니다.

변경 전.

text    data     bss     dec     hex
7905846 1791740  135872 9833458  960bf2

변경 후

text    data     bss     dec     hex
7905026 1787608  135872 9828506  95f89a

따라서 .txt 파일에는 약 800Bytes text, 약 3KB 정도가 저장된다 data.

관련 정보