1 초 안에 리 눅 스 를 시작 하 는 방법

가능 한 한 빨리 시스템 을 가동 하 는 것 은 자동화 설비 에 매우 중요 하 다.시스템 이 사용자 가 감지 할 수 없 는 시간 내 에 작 동 할 수 있다 는 것 은 작업 이 필요 없 을 때 전원 을 완전히 차단 할 수 있다 는 것 을 의미한다.본 고 는 Atmel AT 91 시리즈 의 시스템 과 낸 드 플래시 메모 리 를 바탕 으로 일련의 최 적 화 를 거 쳐 리 눅 스 시스템 의 시작 시간 을 최초의 11 초 에서 최종 656 밀리초 로 낮 추 었 다.
배경 지식
시스템 은 상 전 에서 완전 가동 까지 많은 과정 을 거 쳐 야 한다.간단 한 시작 프로 세 스 는 다음 과 같 습 니 다.
하드웨어 초기 화
안내 프로그램 시작(bootloader)
운영 체제 초기 화
응용 프로그램 실행
그 중에서 하드웨어 는 매우 관건 적 이지 만 하드웨어 는 일반적으로 변경 하기 어렵다.후속 적 인 최 적 화 는 주로 안내 프로그램,Linux 커 널 과 응용 프로그램 에 대해 전개 된다.
유도 프로그램 최적화
안내 프로그램 은 주로 CPU 에 대한 기본 설정,ARM 태그(ATAGS,ARM TAGS)또는 장치 트 리(device trees)처리,저장 관리 장치(MMU,Memory Management Unit)전환 등의 작업 을 수행한다.
U-Boot 에 대해 자주 사용 하 는 최적화 방식 은 다음 과 같다.
네트워크 로 딩 등 필요 하지 않 은 기능 을 삭제 합 니 다.필요 하지 않 으 면 이 코드 를 직접 제거 하 십시오.
불필요 한 기능 닫 기
커 널 미 러 인증 닫 기
안내 프로그램 출력 닫 기
시작 지연 닫 기
유 니 버 설 기능 의 안내 프로그램 을 최 적 화 된 초기 프로그램 로 더(Initial Program Loader,IPL)로 수정 하고 U-Boot 에 대해 서 는 SPL(Second Program Loader,2 단계 프로그램 로 더)을 통 해 구현 할 수 있 습 니 다.
커 널 최적화
리 눅 스 커 널 은 매우 유연 하 게 설계 되 어 필요 한 기능 에 대해 각종 설정 을 최적화 할 수 있다.따라서 커 널 을 최적화 하 는 것 은 시스템 가동 속도 에 중요 하 다.
우선,모든 원 하지 않 는 구동 을 제거 하고 커 널 로 딩 내용 을 최대한 줄 이면 시스템 시작 시간 을 크게 단축 시 킬 수 있다.그 다음으로 커 널 선택 은 더 시도 해 야 할 수도 있다.예 를 들 어 커 널 압축 방식 은 내장 형 시스템 에 있어 LZO 압축 방식 은 보통 좋 은 선택 이 될 것 이다.마지막 으로 작 동 파 라 메 터 를 맞 춰 작 동 을 가속 화 하 는 목적 을 달성 할 수 있다.예 를 들 어'lpj='인 자 를 통 해 모든 순환 에 필요 한 박자 수(loops per jiffy,lpj)의 값 을 미리 설정 하여 시스템 이 시작 할 때 자동 으로 추산 되 지 않도록 할 수 있 습 니 다.이렇게 하면 ARMv 5 기반 시스템 에서 100 ms 이상 의 시간 을 절약 할 수 있다.
커 널 시작 최적화 에 대해 서 는 bootgraph.pl 스 크 립 트(커 널 소스 에 있 는 script/bootgraph.pl)를 통 해 커 널 시작 시간 도 표를 그 려 서 시작 시간 이 가장 오래 걸 리 는 곳 을 분석 할 수 있 습 니 다.이 스 크 립 트 는 매우 간단 합 니 다.dmesg 의 출력 을 직접 입력 하면 svg 도 표를 생 성 할 수 있 습 니 다.

dmesg | perl scripts/bootgraph.pl > output.svg
생 성 된 도 표 는 다음 과 같다.
그림 의 모든 색 단 은 하나의 기능 의 초기 화 시간 을 나타 낸다.필요 하지 않 은 기능 을 간단하게 닫 거나 기능 에 대해 특정한 최 적 화 를 할 수 있다.
커 널 자 체 를 제외 하고 커 널 이 있 는 파일 시스템 도 시스템 작 동 에 큰 영향 을 미친다.플래시 메모리 칩 을 메모리 로 사용 하 는 시스템 으로 는 우 비 FS 가 좋 은 선택 이다.예상 치 못 한 정전 을 용인 할 수 있 고 시스템 이 빠르게 작 동 하도록 마 운 트 속도 가 뛰 어 납 니 다.
응용 프로그램 최적화
커 널 이 시스템 을 시작 한 후 받 으 면 프로그램 이 실 행 됩 니 다.응용 프로그램의 최적화 에 있어 주로 두 부분 이 있 는데 하 나 는 응용 프로그램 이 시작 하 는 INIT 프로 세 스 를 인수 하고 다른 하 나 는 응용 프로그램의 링크 방식 을 최적화 하 는 것 이다.
표준 SystemV INIT 프로그램 은 시작 스 크 립 트 를 실행 해 야 합 니 다.내장 형 시스템 에 있어 서 는 대부분 무의미 하 다.다른 부분(예 를 들 어 파일 시스템 마 운 트)은 프로그램 자체 가 실현 할 수 있 습 니 다.그 다음 에 커 널 시작 매개 변수 에서'init='인 자 를 통 해 INIT 프로 세 스 를 응용 프로그램 으로 직접 지정 할 수 있 습 니 다.
의존 하 는 동적 링크 라 이브 러 리 를 사용 하면 다음 순서 로 찾 습 니 다.
LD_PRELOAD 환경 변수 가 지정 한 경로(일반적으로 대응 하 는 파일/etc/ld.so.preload);
ELF.dynamic 절 중 DTRPATH 입구 에서 지정 한 경로,만약 DTRUnpathh 입구 가 존재 하지 않 는 다 면;
환경 변수 LDLIBRARY_PATH 가 지정 한 경로 이지 만 실행 가능 한 파일 에 setuid/setgid 권한 이 있다 면 이 경 로 를 무시 합 니 다.컴 파일 할 때 지정 한--library-path 는 이 경 로 를 덮어 씁 니 다.
ELF.dynamic 절 중 DTRUnpathh 입구 에서 지정 한 경로;
ldconfig 캐 시 에 있 는 경로(일반적으로/etc/ld.so.cache 파일 에 대응)를 컴 파일 할 때-z nodeflib 링크 옵션 을 사용 하면 이 단 계 를 건 너 뜁 니 다.
/lib,그리고/usr/lib 경 로 는-z nodeflib 링크 옵션 을 사용 하면 이 단계 도 건 너 뜁 니 다.
따라서 가능 한 한 응용 프로그램 이 의존 하 는 동적 링크 라 이브 러 리 를 우선적으로 찾 는 경로 에 놓 으 면 링크 속 도 를 가속 화 할 수 있다.교차 컴 파일 환경 에 대해 특히 주의해 야 합 니 다.호스트 의 동적 링크 라 이브 러 리 위치 와 대상 시스템 의 위치 가 일치 하지 않 을 수 있 습 니 다.이것 은 응용 프로그램 이 실 행 될 때 동적 링크 라 이브 러 리 의 로드 시간 을 증가 시 킬 수 있 습 니 다.
총결산
위 에서 언급 한 세 가지 최적화 점 을 바탕 으로 시스템 의 시작 시간 을 최초의 11s 에서 656 ms 로 낮 출 수 있다.하드웨어 부터 안내 프로그램,커 널 마지막 부터 응용 프로그램 까지 모든 시작 절 차 는 자신 이 최적화 할 수 있 는 부분 이 있 고 간단 한 최적화 를 통 해 시스템 의 시작 시간 을 줄 일 수 있다.
ps:linux 에서 네트워크 카드 시작 및 닫 기 명령
ifup,ifdown:linux 명령
네트워크 인터페이스 파 라 메 터 를 실시 간 으로 수 동 으로 수정 할 수 있 습 니 다.ifconfig 를 이용 하여 이 루어 질 수 있 습 니 다.파일 을 직접 설정 하려 면/etc/sysconfig/network-scripts 에 있 는 ifcfg-ethx 등 파일 의 설정 파 라 메 터 를 통 해 시작 해 야 합 니 다.ifdown 이나 ifup 을 통 해 이 루어 져 야 합 니 다.  

[root@linux ~]# ifup {interface}
[root@linux ~]# ifdown {interface}
[root@linux ~]# ifup eth0  
 
ifup 과 ifdown 은 정말 간단 합 니 다.이 두 프로그램 은 사실 script 일 뿐 입 니 다./etc/sysconfig/network-scripts 디 렉 터 리 에서 해당 하 는 설정 파일 을 직접 검색 합 니 다.예 를 들 어 ifup eth 0 은 ifcfg-eth 0 이라는 파일 의 내용 을 찾 아 설정 합 니 다.ifcfg-eth 0 설정 에 대해 서 는 이전 장 에서 인터넷 에 연 결 된 설명 을 참고 하 시기 바 랍 니 다.
단,이 두 프로그램 은 주로 설정 파일(ifcfg-ethx)을 검색 하여 시작 하고 닫 기 때문에 사용 하기 전에 ifcfg-ethx 가 올 바른 디 렉 터 리 에 존재 하 는 지 확인 하 십시오.그렇지 않 으 면 시작 에 실패 합 니 다.또한 ifconfig eth 0 으로 설정 하거나 네트워크 인 터 페 이 스 를 수정 하면 ifdown eth 0 으로 닫 을 수 없습니다.ifdown 은 현재 네트워크 매개 변수 가 ifcfg-eth 0 과 일치 하 는 지,일치 하지 않 으 면 이 작업 을 포기 하기 때 문 입 니 다.따라서 ifconfig 를 사용 하여 수정 을 마 친 후 ifconfig eth 0 down 을 사용 해 야 이 인 터 페 이 스 를 닫 을 수 있 습 니 다.
어떻게 LINUX 네트워크 카드 를 켜 서 자동 으로 시작 합 니까?
네트워크 카드 활성화 명령 은:ifconfig eth 0 up 명령 을 알 았 으 니 스 크 립 트 를 만들어 시작 항목 에 두 면 됩 니 다.
네트워크 카드 설정 파일 편집 을 통 해 네트워크 카드 설정 파일 을/etc/sysconfig/network-scripts 디 렉 터 리 아래 에 저장 하 는 것 을 권장 합 니 다.첫 번 째 네트워크 카드 의 파일 은 ifcfg-eth 0 이 고 두 번 째 블록 은 ifcfg-eth 1 입 니 다.따라서 한 조각 이 있다 면 명령 vi 를 입력 하 십시오.  /etc/sysconfig/network-scripts/ifcfg-eth 0 을 열 고 ONBOOT=no 를 ONBOOT=yes 로 변경 합 니 다.(없 으 면 수 동 으로 ONBOOT=yes 를 추가 합 니 다)종료 저장 하고 서 비 스 를 다시 시작 합 니 다.

echo "ONBOOT=yes" >> /etc/sysconfig/network-script/ifcfg-eth0
/etc/sysconfig/network-scripts 에 ONBOOT=yes 설정 네트워크 켜 기 자동 시작
이상 의 내용 은 1 초 안에 Liux 를 시작 하 는 방법 을 소개 하 였 으 며,Liux 시작 에 관 한 지식 에 관심 이 있 는 친구 들 과 함께 공부 하 세 요.

좋은 웹페이지 즐겨찾기