그것은 전적으로 장치에서 어떤 서비스를 원하느냐에 달려 있습니다.
프로그램들
Linux를 쉘로 직접 부팅 할 수 있습니다 . 셸을 갖고 싶어하는 프로덕션 환경에서는 그다지 유용하지 않지만 대화 형 부트 로더가있는 경우 개입 메커니즘으로 유용 init=/bin/sh
합니다. 커널 명령 줄로 전달 하십시오. 모든 Linux 시스템 (및 모든 유닉스 시스템)에는 Bourne / POSIX 스타일 쉘이 /bin/sh
있습니다.
쉘 유틸리티 세트가 필요하다 . BusyBox 는 매우 일반적인 선택입니다. 이 파일을 텍스트 조작 (대한 쉘 및 일반 유틸리티가 포함되어 cp
, grep
설치, 네트워킹, ...) ( ping
, ifconfig
, ...), 프로세스 조작 ( ps
, nice
, ...), 및 기타 다양한 시스템 도구 ( fdisk
, mount
, syslogd
, ...). BusyBox는 매우 구성이 가능합니다. 컴파일 타임에 원하는 도구와 개별 기능을 선택하여 응용 프로그램에 적합한 크기 / 기능 저하를 얻을 수 있습니다. 외에도에서 sh
, 당신은 정말없이 아무것도 할 수있는 최소한의 mount
, umount
그리고 halt
, 그러나 또한이없는 것이 전형적인 것 cat
, cp
, mv
, rm
,mkdir
, rmdir
, 각 유틸리티에 대한 심볼릭 링크가 있습니다.ps
, sync
그리고 몇 가지 더. BusyBox는 단일 바이너리로 설치됩니다.busybox
일반적인 유닉스 시스템의 첫 번째 프로세스를라고 init
합니다. 그 임무는 다른 서비스를 시작하는 것입니다. BusyBox에는 초기화 시스템이 포함되어 있습니다. init
바이너리 (보통에 위치 /sbin
) 외에도 시작해야 할 서비스를 나타내는 구성 파일 (보통 /etc/inittab
— 현대적인 일부 대체 파일은 해당 파일로 대체되지만 소형 임베디드 시스템에서는 찾을 수 없음)이 필요합니다. 그리고 언제. BusyBox의 경우 /etc/inittab
선택 사항입니다. 누락 된 경우 콘솔과 스크립트에 루트 쉘이 있습니다./etc/init.d/rcS
이 표시되고 부팅시 (기본 위치)가 실행됩니다.
물론 장치가 유용한 기능을 수행 할 수있는 프로그램 이외에도 필요한 모든 것입니다. 예를 들어 OpenWrt 변형을 실행하는 내 홈 라우터 에서 유일한 프로그램은 BusyBox입니다.nvram
(NVRAM의 설정을 읽고 변경하기위한)와 네트워킹 유틸리티입니다.
모든 실행 파일이 정적으로 링크하지 않는 한, 당신은 (동적 로더가 필요합니다 ld.so
libc의의와 프로세서 아키텍처의 선택에 따라 다른 이름으로 호출 할 수 있습니다) 모든 동적 라이브러리 ( /lib/lib*.so
이들의 일부를 아마를, /usr/lib
에서 요구하는) 이러한 실행 파일.
디렉토리 구조
파일 시스템 계층 구조 표준 리눅스 시스템의 공통의 디렉토리 구조를 설명합니다. 데스크탑 및 서버 설치에 적합합니다. 임베디드 시스템에서는 많은 부분을 생략 할 수 있습니다. 일반적인 최소값은 다음과 같습니다.
/bin
: 실행 프로그램 (일부 /usr/bin
대신 있을 수 있음 ).
/dev
: 장치 노드 (아래 참조)
/etc
: 구성 파일
/lib
: 동적 로더를 포함한 공유 라이브러리 (모든 실행 파일이 정적으로 링크되지 않은 경우)
/proc
: proc 파일 시스템의 마운트 지점
/sbin
: 실행 가능한 프로그램. 와 구별 /bin
IS /sbin
시스템 관리자 만에게 유용한 프로그램이지만,이 구별은 임베디드 디바이스에 의미가 없습니다. 에 /sbin
대한 심볼릭 링크를 만들 수 있습니다 /bin
.
/mnt
: 유지 관리 중 스크래치 마운트 지점으로 읽기 전용 루트 파일 시스템에 편리
/sys
: sysfs 파일 시스템의 마운트 지점
/tmp
: 임시 파일의 위치 (종종 tmpfs
마운트)
/usr
: 서브 디렉토리를 포함하고 bin
, lib
하고 sbin
. /usr
루트 파일 시스템에없는 추가 파일에 대해 존재합니다. 이것이 없으면 /usr
루트 디렉토리에 심볼릭 링크를 만들 수 있습니다 .
장치 파일
다음은 최소한의 일반적인 항목입니다 /dev
.
console
full
(쓰기는 항상 "장치에 남은 공간 없음"을보고합니다)
log
( syslogd
BuyBox와 같은) 데몬이 읽는 경우 (프로그램이 로그 항목을 보내는 데 사용하는 소켓 )
null
(항상 비어있는 파일처럼 작동)
ptmx
그리고 pts
디렉토리 , 당신은 사용하려면 의사 단자를 (콘솔에 비해 즉 어떤 터미널 다른) - 장치가 네트워크에 연결되어 예를 들어, 경우에 당신은 텔넷 또는 ssh에서 원하는
random
(임의의 바이트를 반환, 블로킹의 위험이 있습니다)
tty
(항상 프로그램 터미널을 지정합니다)
urandom
(임의의 바이트를 반환하고 차단하지는 않지만 새로 부팅 한 장치에서는 무작위가 아닐 수 있음)
zero
(무한한 null 바이트 시퀀스를 포함합니다)
/dev
직렬 포트, 스토리지 등 하드웨어에 대한 항목이 필요합니다 (네트워크 인터페이스 제외 ).
임베디드 장치의 경우 일반적으로 루트 파일 시스템에서 직접 장치 항목을 작성합니다. 고급 시스템에는 항목 MAKEDEV
을 작성하기 위해 호출되는 스크립트가 /dev
있지만 내장 시스템에서 스크립트는 종종 이미지에 번들로 제공되지 않습니다. 일부 하드웨어를 핫 플러그 할 수있는 경우 (예 : 장치에 USB 호스트 포트가있는 경우) udev/dev
로 관리해야합니다 (루트 파일 시스템에 최소 세트가있을 수 있음).
부팅시 작업
루트 파일 시스템 외에도 정상적인 작동을 위해 몇 가지를 더 마운트해야합니다.
- procfs on
/proc
(거의 없어서는 안될)
- sysfs on
/sys
(거의 필수 불가결)
tmpfs
파일 시스템 켜기 /tmp
(플래시 또는 읽기 전용 일 수있는 루트 파일 시스템이 아닌 RAM에있는 임시 파일을 프로그램이 만들 수 있도록)
/dev
동적 인 경우 tmpfs, devfs 또는 devtmpfs (위의“장치 파일”의 udev 참조)
- devpts 에
/dev/pts
당신이 [의사 터미널을 사용하려면 (약 발언 참조 pts
위)
당신은 할 수 있습니다 /etc/fstab
파일 및 전화를 mount -a
하거나 실행 mount
수동.
시작 시스템 로그 (물론 데몬 klogd
경우 생성을위한 커널 로그를 syslogd
당신이 쓰기 로그에 어떤 장소가있는 경우, 프로그램이 알아서하지 않습니다).
그런 다음 장치는 응용 프로그램 별 서비스를 시작할 수 있습니다.
루트 파일 시스템을 만드는 방법
이것은 길고 다양한 이야기이므로 여기서 할 것은 몇 가지 지침을 제시하는 것입니다.
루트 파일 시스템은 RAM (ROM 또는 플래시의 (일반적으로 압축 된) 이미지에서로드 된) 또는 디스크 기반 파일 시스템 (ROM 또는 플래시에 저장된)에서 유지되거나 네트워크에서로드 될 수 있습니다 (종종 TFTP를 통해 ) . 루트 파일 시스템이 RAM에 있으면 부트시 내용이 생성되는 RAM 파일 시스템 인 initramfs로 설정하십시오 .
임베디드 시스템의 루트 이미지를 조립하기위한 많은 프레임 워크가 존재합니다. BusyBox FAQ 에는 몇 가지 지침이 있습니다 . Buildroot 는 널리 사용되는 것으로 Linux 커널 및 BusyBox와 유사한 설정으로 전체 루트 이미지를 작성할 수 있습니다. OpenEmbedded 는 또 다른 프레임 워크입니다.
Wikipedia에는 널리 사용되는 임베디드 Linux 배포판 의 (불완전한) 목록이 있습니다 . 가까이에있을 수있는 임베디드 Linux의 예로는 네트워크 장치 용 OpenWrt 운영 체제 제품군 (팅커의 홈 라우터에서 인기 있음)이 있습니다. 경험을 통해 배우고 싶다면 Scratch 에서 Linux를 사용해 볼 수 있지만 임베디드 장치가 아닌 취미를 위해 데스크탑 시스템에 맞춰져 있습니다.
Linux vs Linux 커널에 대한 참고 사항
Linux 커널에 구워진 유일한 동작은 부팅시 시작된 첫 번째 프로그램입니다. ( 여기서 initrd 및 initramfs의 미묘한 부분 은 다루지 않을 것입니다 .) 전통적으로 init 라고하는이 프로그램 에는 프로세스 ID 1이 있으며 특정 권한 ( KILL 신호에 대한 면역 ) 및 책임 ( 고아 제거 )이 있습니다. 당신은 리눅스 커널 시스템을 실행하고 첫 번째 과정으로 원하는대로 시작,하지만 당신이해야하는 것은 리눅스 커널을 기반으로 운영 체제이며, 일반적으로 "리눅스"라고하지 무엇을 할 수 - 리눅스 에서 상식 용어의하는 것입니다 유닉스 , 그 커널을가 -like 운영 체제 Linux 커널. 예를 들어, Android는 Unix와는 다르지만 Linux 커널을 기반으로하는 운영 체제입니다.