램 디스크를 포함한 커널 이미지 (.img) 빌드


12

다음 단계에 따라 Raspberry Pi 용 Linux 커널 (3.0.1)을 빌드했습니다.

1. Downloading kernel source
2. tar xvf source.tar.bz2
3. downloading arm cross compilation tool.
4. tar xvf arm-2010q1-202-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
5. setting up path for cross tool export PATH=$PATH:/home/shan/<cross tool folder>/bin/
6. after entering linux source dir make ARCH=arm versatile_defconfig (is this reliable   with raspberry pi)
7. make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi-
8. zImage is generated in /arch/arm/boot

내 질문은 어떻게 kernel.img를 만들 수 있습니까? zImage + ramdisk가 포함되어 있다고 생각하지만 어떻게 만들 수 있습니까?

누구든지 나를 램 디스크로 만들고이 두 가지를 kernel.img 파일로 압축하도록 안내 할 수 있습니까? 이 커널을 Raspberry Pi에서 부팅하고 싶습니다.


이것은 아직 놀랍지 않은 놀라운 질문입니다.
Jivings

왜 커널 3.0.1을 사용하고 있습니까? 이 바닐라 커널이 kernel.org사이트에 있습니까?
Krzysztof Adamski

예, 이것을 kernel.org에서 찾았습니다
Shantanu Banerjee

나는 initramfs에서 busybox와 함께 qemu와 crosscompiled raspberry pi-2 커널에 관한 새로운 질문을 추가했습니다 : raspberrypi.stackexchange.com/questions/56302/…
42n4

답변:


8

kernel.img 파일

Linux 커널을 사용하는 경우 kernel.img파일 이름이 바뀝니다 linux/arch/arm/boot/Image. 이 파일의 압축 버전을 사용하는 것도 가능해야합니다 (또는 적어도 마지막으로 확인했을 때 가능했을 수도 있음) zImage. 통합 initramfs(ramdisk)을 포함 할 수 있지만 필수는 아닙니다. 예를 들어, 스톡 kernel.img파일은 initramfswhile을 포함 kernel_emergency.img하지 않습니다.

참고 : eLinux 위키의 공식 커널 컴파일 안내서는 파일 imagetool-uncompressed.py을 준비하기 위해 도구를 사용해야한다고 제안 kernel.img합니다. RaspberyPi 초기에는 필요했지만 오늘날 부트 로더는 일반 파일 ImagezImage파일을 처리 할 수 ​​있습니다 .

커널 소스 문제

매우 중요한 것은 RaspberryPi 용 커널을 빌드 할 때 모든 버전을 사용할 수 없다는 것입니다. RaspberryPi로 포팅 된 특수 버전 만 작동합니다. 불행히도 현재 업스트림 버전 ( kernel.org사이트에 있음)은 RaspberryPi와 호환되지 않습니다. 또한 versatil_configRaspberryPi에는 좋지 않습니다. bcmrpi_defconfig대신 RaspberryPi 호환 커널 소스에서 찾거나 bcmrpi_emergency_defconfigbuildin을 사용하려는 경우 사용해야합니다 initramfs.

커널 구축 지침

RaspberryPi의 커널 소스를 얻는 가장 좋은 곳은 github 재단 입니다. 또한 공식 RasbperryPi 위키 에서이를 얻는 방법과 컴파일하는 방법에 대한 유용한 설명을 찾을 수 있습니다 . 여기에 간단한 단계의 관련 단계가 있습니다 (참고 : 커널을 크로스 컴파일하고 싶다고 가정합니다. 훨씬 빠르며 동일한 결과를 만들어야하지만 RaspberryPi에서 기본적으로 커널을 빌드하는 것도 가능합니다).

  1. 공식 툴체인을 다운로드하여 직접 만드십시오. Eigher 방식으로에 설치되어 있다고 가정합니다 /usr/bin/arm-linux-gnueabi-*. 다른 위치에 있으면 CROSS_COMPILE모든 make명령 에서 옵션을 변경 해야 합니다.

  2. 공식 RapsberryPi 커널 소스를 찾을 수있는 https://github.com/raspberrypi/linux 사이트로 이동 하십시오 . 두 가지 방법으로 코드를 다운로드 할 수 있습니다.

    • 압축 파일로서 (이 옵션을 사용하려면 git유틸리티 를 설치할 필요가 없으며 RapsberryPi 자체에서도이를 수행 할 수 있습니다) : 사이트 상단의 탭 ZIP아래에있는 작은 아이콘을 클릭하십시오 Code. 최신 소스 파일을 zip파일 로 다운로드 할 수 있습니다 . 대신 git을 사용 하여이 작업을 수행 할 수 있지만 (위키에 설명 된 것처럼) 훨씬 더 많은 시간과 공간이 필요합니다. 그런 다음 파일을 압축 해제하여 소스 트리를 가져 오십시오.
    • git유틸리티를 사용하면 (소량의 RAM이 있기 때문에 RaspberryPi에서 작동하지 않았지만 데스크탑 시스템에서는 정상적으로 작동합니다 ( --depth 1git이 개발의 전체 기록을 다운로드하지 못하게하는 인수에 유의하십시오 (거대한)) :

      git clone --depth 1 git://github.com/raspberrypi/linux.git
      
  3. Foundation에서 제공 한 기본 구성을 사용하십시오.

    cp arch/arm/configs/bcmrpi_defconfig .config
    
  4. make oldconfig몇 가지 질문을 실행 하고 답변 하십시오 (기본 답변을 남기고 각 질문에 엔터를 치면 괜찮습니다).

    make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- oldconfig
    
  5. 커널을 컴파일하십시오 :

    make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi-
    
  6. 커널 모듈을 /tmp/modules다음으로 복사하십시오 .

    make ARCH=arm modules_install INSTALL_MOD_PATH=/tmp/modules
    
  7. Image파일을 다른 이름으로 사용kernel.img

  8. /tmp/modules/lib/modules/컴퓨터의 모든 모듈을 /lib/modules/RaspberryPi rootfs의 디렉토리 로 업로드 하십시오.

initramfs 추가

initramfs그러나을 만드는 방법에 대한 지침은 제공하지 않습니다 . 이것은 매우 광범위한 주제 이기 때문에 (기본적으로 Linux 사용자 공간 환경을 작성해야하며 실제로 얼마나 복잡한 지에 대한 제한이 없습니다), 나는 여기서 다루지 않을 것입니다. 필자는 initramfs별도의 파일 인 독립형과 커널 이미지 파일과 통합 된 빌드 인 (와 같이 kernel_emergency.img) 의 두 가지 다른 형식으로 만 사용할 수 있습니다 . 두 번째 옵션은 RaspberryPi 부트 로더에서 지원해야하지만 현재 펌웨어 버전에서 손상 되었다는 소문 이 있으므로 빌드 버전을 사용해야합니다.

시작하는 가장 좋은 방법은 다른 기초 github 저장소 에서 다운로드하여 작동하는 initramfs 컨텐츠 (kernel_emergency.img에 사용)를 사용하고이 iniramfs이미지를 사용하여 커널을 부팅 한 후에 만 자신의 빌드를 시도하는 것입니다. 이를 위해 필요한 것은 다운로드 한 디렉토리 uing CONFIG_INITRAMFS_SOURCE커널 구성 옵션 을 가리 키기위한 것입니다 .

최종 노트

따라서 3 단계로 수행해야합니다.

  1. initramfs파일 없이 커널을 빌드하고 부팅 하십시오.
  2. initramfs커널에 준비된 컨텐츠를 추가 하십시오.
  3. initramfs필요에 따라이 컨텐츠를 변경하십시오 .

1
대단한 글을 쓰지만 사용해서는 안됩니다 zip. git효율적으로 파일을 전송하고 depth=1다운로드 기록을 방지 하는 데 사용할 수 있습니다 (제 생각에).
Alex Chamberlain

예, 이것은 사실이지만 RaspberryPi 자체 에서이 작업을 시도하는 것은 실제로 좋은 생각이 아닙니다. 반면에 zip 다운로드는 훌륭하게 작동합니다. git 사용에 대한 간단한 메모를 추가 할 것입니다.
Krzysztof Adamski

Raspberry Pi에서 커널을 컴파일하는 것은 그 자체로 끔찍한 아이디어입니다.
Alex Chamberlain

@ AlexChamberlain : 정말 느리지 만 확실히 가능합니다 (나는 이것을 직접했습니다). 하룻밤이 걸리므로 그렇게 나쁘지는 않습니다. 그 외에 왜 그렇게 끔찍한가요?
Krzysztof Adamski

bcmrpi_emergency_defconfig를 사용하면 initramfs가 포함됩니까 ??
Shantanu Banerjee

0

X-Apt, dpkg-cross 등을 사용하여 동일한 버전의 데비안을 실행하는 경우 emdebian 도구가 매우 잘 작동 할 수 있습니다.

출처 : emdebian을 실행하는 임베디드 ARM 시스템을위한 c ++ 앱을 개발하는 데 사용됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.