buildroot 루트 파일을 위한 리눅스 빌드 시스템
빌드루트 홈페이지 : https://buildroot.org/
Buildroot - Making Embedded Linux Easy
buildroot.org
제조사에서 제공하는 SDK나 BSP가 있고, 루트 파일 시스템이 이미 준비돼 있다면 buildroot를 굳이 사용할 필요가 없다.
빌드루트 압축파일 다운로드
tar -xvfj 파일명 으로 압축을 풀어주면
buildroot 소스 코드가 나온다.
make menuconfig 해주면 그래픽 구성 인터페이스가 나타난다.
메뉴얼 링크 - https://buildroot.org/downloads/manual/manual.pdf
간단히 설명하자면
1. target options 설정
2. 툴체인 구성 - 크로스 컴파일러 구성
arm-linux-gnueabihf-gcc
aarch64-linux-gnu-gcc
riscv64-unknown-linux-gnu-gcc
<타겟 CPU>-<벤더>-<OS>-<ABI>-gcc
- arm-linux-gnueabihf-gcc
- arm: 아키텍처 (ARM 32bit)
- linux: OS
- gnueabihf: GNU EABI + 하드웨어 부동소수점
- gcc: GNU 컴파일러
- aarch64-linux-gnu-gcc
- aarch64: 64비트 ARM
- linux: OS
- gnu: GNU toolchain
- gcc: GNU 컴파일러
크로스 컴파일시
export CROSS_COMPILE=arm-linux-gnueabihf-
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
혹은 configure 기반 빌드 시스템
./configure --host=arm-linux-gnueabihf
3. 시스템 구성
system hostname
system banner
Init system
/dev management
로그인 비밀번호 등
4. 파일 시스템 이미지 구성
----------------------------------------------------------------
제조사 제공 플래싱 쿨이 있으면 안해도 된다.
- NXP i.MX → mfgtool/uuu 사용
- Allwinner → PhoenixSuit, LiveSuit, Fel tool 사용
- Rockchip → rktool, rkflash, rkdeveloptool 사용
- Amlogic → AML_Burn_Tool, fastboot 등 사용
- Raspberry Pi → SD카드에 직접 이미지 복사 (dd, BalenaEtcher 등)
mfgtool은 NXP i.MX 시리즈 SoC에서 많이 사용되는 제조사 제공 플래싱 툴입니다. 주로 Windows에서 실행되고, 다음을 지원합니다:
- U-Boot, 커널, 루트 파일 시스템 등 플래싱
- eMMC, SD, NAND 등에 이미지 설치
- USB를 통해 디바이스에 직접 설치 (USB OTG 부트 모드 활용)
mfgtool 관련 사항:
- i.MX6, i.MX8 계열에서 많이 사용됨
- .uuu 또는 .cfg 스크립트 기반으로 이미지 설치 절차 정의
- uuu (Universal Update Utility)는 mfgtool의 후속 버전
----------------------------------------------------------------
5. 리눅스 커널 및 uboot 컴파일
- 기본적으로 비활성화 하고 사용 해야 한다.
buildroot에서 다운로드한 linux 커널과 uboot 공식 소스 코드는 드라이버 파일이 부족하고 최신 리눅스 커널과 uboot 컴파일러 버전 요구 사항 충족해야하므로 오류가 발생할 수 있다.
따라서 buildroot를 구성해서 빌드루트만 사용하여 루트 파일 시스템을 빌드해야 한다.
6. 대상 패키지 구성
ffmpeg alsa-utils 등의 도구나 타사 라이브러리 구성 가능하지만 컴파일 실패 방지 위해 루트 파일 시스템만 먼저 구성하고 이후 라이브러리와 소프트웨어를 구성해서 해라, 처음 부터 다 선택하면 많은 리소스를 사용 컴파일 실패에 문제 발생시 찾기 어려움
7. 빌드루트 컴파일
sudo make
소스 코드를 다운로드 받으면서 컴파일 진행되기 때문에 매우 오래 걸린다.
특정 소스가 매우 느리다면 해당 표시 된 링크에 접속해서 파일 다운로드 받은 후
buildroot/dl 폴더에 복사한다.
make 완료하면 /output/images 아래에 루트 파일 시스템이 생성된다.
rootfs.ext2 rootfs.ext4 rootfs.tar rootfs.ubi rootfs.ubifs
여러 형식의 rootfs 가 컴파일
rootfs.tar는 패키징된 루트파일 시스템이다.
tar파일 폴더 만들어 압축을 풀면
bin
etc
lib32 등 폴더 및 파일이 생성된다.
이것이 컴파일된 루트 파일 시스템이다.
이제 루트파일시스템(rootfs)를 마운트 할 수 있다.
ㅁ 루트 파일 시스템 마운트 방식
NFS | 네트워크를 통해 PC에서 공유된 루트FS를 마운트 | 수정·디버깅 편리 | 네트워크 필요, 속도 느림 |
initramfs (cpio.gz) | 커널에 내장된 초기 파일 시스템 | 독립적 부팅, 빠름 | 용량 제한, 임시FS |
SD 카드 / eMMC (ext4 등) | ext2/3/4로 포맷된 저장장치에서 마운트 | 안정적, 독립 실행 가능 | 수동 업데이트, 쓰기 제한 가능 |
UBI/UBIFS (NAND Flash) | 플래시 전용 파일 시스템 (NAND에 최적) | 플래시에 적합, wear leveling 지원 | 설정 복잡, 툴 필요 |
SquashFS (읽기 전용) | 압축된 읽기 전용 FS, 커널에서 직접 마운트 | 용량 작음, 보안성 좋음 | 쓰기 불가, 오버레이 필요 |
JFFS2 / YAFFS2 | NAND용 오래된 플래시 FS | 일부 보드에 적합 | 느리고 구식 |
ramfs / tmpfs | 메모리에 올려서 사용하는 파일 시스템 | 빠름 | 재부팅 시 초기화, 저장 불가 |
8 루트파일 시스템 테스트
위 마운트 방식으로 마운트하고 > Uboot를 시작 > bootargs 환경 변수를 수정 > nfsroot나 root 디렉터리를 ubuntu의 buildrootfs 디렉터리로 설정 하는 명령 입력
setenv bootargs 'console=tty1 ................................'
uboot로 접속하면 /lib/modules 파일과 폴더를 찾을 수 없다하는데 이는 디렉터리를 생성하면 된다.
그이후 로그인 id pw 를 입력하면 된다.
id는 root password 는 3. 시스템 구성에서 입력한 Root password 값이다.
이렇게 하면 루트 파일 시스템이 실행된다.
현재 이 루트파일 시스템은 기본상태이다. 타사 라이브러리나 소프트웨어를 설정하지 않았기 떄문
9. 타사 소프트웨어 및 라이브러리 구성
ffmpeg alsla-utils등 타사 라이브러리 소프트웨어 구성
간단하다. buildroot에서 직접 구성하고 활성화
이전에는 타사 sw및 라이브러리는 직접 포팅했어야 했다.
make menuconfig 입력해서 target packages > libararies > 에서 구성 선택하여 활성화 하면 된다.
다시 컴파일하면 rootfs.tar 파일 나오면 이전에 만들었던 폴더에 buildroot 디렉터리에 복사 후 압축 풀면 된다
이전 파일은 삭제 되지 않고 새로 푼 압축 파일이 추가된다.
tar -xvf rootfs.tar
10. buildroot 하위의 busybox 구성
buildroot는 기본적으로 busybox 를 루트파일 시스템 빌드할때 사용한다.
busybox 구성 설정도 가능하다.
buildroot가 다운로드한 소스 코드 압축 패키지 중에 있다.
/dl 폴더에 저장된다.
dl/buisybox/ 폴더에 저장
busybox-x.x.tar.bz2 로 되어있는데 이것을 압축을 풀고
sudo make busybox-menuconfig 로 설정이 가능하다.
busybox의 Makefile을 열고 ARCH 및 CROSS_COMPILE 값을 추가 한다.
CROSS_COMPILE 은 절대 경로를 사용해야한다.
11. 컴파일 설정 옵션
1) defconfig- 기본구성
2) allyesconfig - 모든 구성 선택 - busybox 모든 기능 선택
3) allnoconfig - 최소구성
make defconfig
make menuconfig
그리고 Location : Settings > build static binary(no shared libs) 를 선택 가능한데
정적 바이너리빌드 옵션은 busybox를 정적으로 컴파일할지 동적으로 컴파일할지 결정
정적 컴파일 - 라이브러리 파일 필요 없으나 컴파일된 라이브러리 크기 매우 커짐
동적 컴파일 - 루트 파일 시스템에 라이브러리 파일 필요하지만 컴파일된 busybox크기는 훨씬 작아진다.
정적 파일 사용하면 DNS 문제 발생 (도메인이름)
simplify modutils는 어떤 의미인가요?
"modutils 기능을 단순화해서 BusyBox 버전만 사용한다."
즉, insmod, rmmod, lsmod, modprobe 등을 풀 버전(modutils or kmod) 대신 BusyBox의 경량화된 버전으로 제공한다는 뜻입니다.
[*] Simplify modutils
이걸 활성화하면:
modprobe, insmod, rmmod, lsmod 등의 명령어는 BusyBox의 간단한 구현을 사용
depmod나 복잡한 modprobe.conf 파싱 등 고급 기능은 생략됨
바이너리 크기가 작아짐
mdev는 BusyBox에서 제공하는 udev 대체 도구로, 디바이스 노드를 자동으로 생성/삭제해주는 미니멀한 유틸리티입니다. 임베디드 리눅스 환경에서 udev보다 훨씬 가볍고 빠르기 때문에 Buildroot나 BusyBox 기반 시스템에서 자주 사용됩니다.
/dev 아래 장치 파일
특정 장치 연결 시 자동 스크립트 실행 가능:
usb[^/]* 0:0 660 @/etc/mdev/usb-hotplug.sh
sd[a-z][0-9]* 0:0 660 @/etc/mount-sd.sh
ttyUSB[0-9]* 0:0 660 @/etc/serial-init.sh
<장치이름 정규식> <UID:GID> <퍼미션> [동작]
/etc/init.d/rcS 또는 inittab에 mdev 실행 추가
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s # 현재 커널에 등록된 장치들 스캔하여 /dev 노드 생성
✅ Buildroot에서 mdev 활성화하는 법
- System configuration → /dev management
- [ ] None
- [ ] Static using device table
- [x] Dynamic using devtmpfs + mdev ← 이걸 선택
- 필요시 /etc/mdev.conf 생성
- BusyBox에서 mdev 관련 설정도 켜야 함:
- BusyBox → Linux System Utilities → mdev 체크
12. busybox 컴파일
buildroot에서 busybox 컴파일하고 buildroot소스 디렉토리 이동후
$sudo make show-targets 입력하여 buildroot 에 구성된 모든 대상 소프트웨어 패키지를 볼 수 있다.
$ sudo make busybox
$ sudo make
PS1 환경변수 설정
/etc/profile
프롬프트 형식 설정
'OS > 리눅스' 카테고리의 다른 글
QT version check 방법 (0) | 2025.06.09 |
---|---|
리눅스 빌드 시스템 (0) | 2025.06.06 |
자주쓰는 리눅스 명령어 모음 (0) | 2020.03.01 |
영상관련 작업 할 때 꼭 필요한 샘플 영상 다운받기 (0) | 2017.01.20 |
ssh port 변경하는 것 (0) | 2017.01.17 |