2014-11-15 10 views
1

그래서 저는 임베디드 리눅스를 배우려는 중이며 몇 가지 질문에 답을 얻지 못하는 것 같습니다.임베디드 리눅스 초심자 질문

1) 컴파일 할 때 커널이 dtb/dts 파일에 의존합니까? 나는 커널이 칩 아키텍처 (즉, arm)만을 알아야하고 dtb 파일은 부트 로더 (uBoot)에 의해로드되므로 커널은 dtb 파일로 구성된 드라이버를로드해야한다고 생각했습니다.

2) 혼합 및 일치 : 나는 내가

  • 커널 다음 혼합 부트 로더, DTB, 커널, rootfs, 주어진 모듈의 조합을 일치시킬 수 있습니다 인상을 해요 : 알고 있어야하는 칩을 컴파일해야합니다
  • dtb : 보드 세부 정보와 칩을 알고 있어야합니다. 즉, SPI 용 GPIO를 구성합니다.
  • 부트 로더 : 칩을 알고 있어야하며 uEnv.txt에 커널과 dtb에 대한 매개 변수가 있어야합니다. 위치
  • rootfs : 완전 독립
  • 모듈 : 커널

3) 드라이버의 특정 버전으로 컴파일해야합니다 나는 SPI 드라이버를로드하려면 나는 특정 아무것도 필요하거나 커널이 DTB 파일 때문에이 운영하는 방법을 알 수 할 필요한 레지스터를 설정 하시겠습니까?

4) 모듈 : 이것들은 커널에만 의존하고 있습니까? 아니면 칩과 보드에 대해 알고 있어야합니까? (제가 말하고자하는 것은 간단한 팔이나 x86 아키텍처 이상을 알아야한다는 것입니다) ?

미리 감사드립니다. 저는 이것이 몇 가지 기본적인 질문이지만 어떤 도움을 주신 것으로 알고 있습니다.

답변

3

1) 컴파일 할 때 커널이 dtb/dts 파일에 의존합니까? 필자는 커널이 칩 아키텍처 (즉, arm) 만 알고 dtb 파일이 부트 로더 (uBoot [sic])에 의해로드되므로 커널이 dtb 파일로 구성된 드라이버를로드 할 필요가 있다고 생각했습니다.

Linux 커널은 장치 트리에 종속되지 않고 컴파일됩니다.
커널 컴파일은 칩 아키텍처에 따라 다르지만 컴파일되는 코드 모듈은 보드 구성 및 기능 선택에 따라 다릅니다.
BTW 범용 부팅 용 U-Boot이지 microBoot가 아닙니다.

2) 혼합 및 일치 : 나는 혼합 부트 로더, DTB, 커널, rootfs의 조합을 일치시킬 수 있습니다 인상을 해요, 그리고 모듈은 다음과 같은

커널을 제공 : 알고 있어야하는 칩을 알고 있어야합니다
dtb : 보드 세부 정보와 칩을 알고 있어야합니다. 즉, RAM이 얼마인지, SPI 용 GPIO를 구성하십시오. 부트 로더 : 칩을 알고 있어야하며 uEnv.txt에 커널 및 dtb 위치에 대한 매개 변수가 있어야합니다.
rootfs : 완전 독립
modules : 특정 버전의 커널로 컴파일해야 함

본질적으로는 맞지만 일반적으로 "믹스 앤 매치"를 시도하는 데 배변하지 않습니다.종종 최적 또는 선호하는 (또는 적어도 적절한) 선택이 있습니다.
"rootfs"나는 rootfs에 대한 파일 시스템의 유형을 의미한다고 가정합니다. rootfs에 대한 이미지입니다. (아래 부록을 참조하십시오.)

3) 드라이버 : 나는 SPI 드라이버를로드하려면 나는 특정 아무것도 또는

을 필요로 할

"SPI 드라이버", 마스터와 프로토콜의 두 가지 유형이 있습니다 .
SPI 마스터 드라이버는 하나의 인터페이스 마스터 역할을하는 SPI 컨트롤러 칩용입니다. 이것은 보통 플랫폼 드라이버이며 장치 노드가 /dev이 아닙니다.
각 SPI 슬레이브 장치에는 프로토콜 드라이버가 있어야합니다. 이 드라이버는 일반적으로 장치 노드가 /dev입니다.

커널은 dtb 파일이 필요한 레지스터를 설정하기 때문에 커널을 조작하는 방법을 알고 있습니까?

장치 트리는 어떤 장치에 대한 드라이버와 각 장치에 할당/할당 된 모든/모든 자원을 지정해야합니다.

dtb 파일에 "설정"이 없습니다. 구성 데이터 일뿐입니다. 실행 가능한 코드가 없습니다. 디바이스 드라이버는 일반적으로 프로브 또는 초기화 단계에서 자원 획득/할당을 담당합니다.

4) 모듈 : 이것들은 커널에만 의존하고 있습니까? 아니면 칩과 보드에 대해 알고 있어야합니까?

귀하의 "모듈"사용은 모호합니다. 소스 코드 파일은 "모듈"이라고도합니다. 아마도로드 가능한 커널 모듈을 의미 할 것입니다.

대부분의 사람들은 커널 모듈을 장치 드라이버와 연관 시키지만 파일 시스템 및 네트워크 프로토콜 처리기와 같은 다른 커널 서비스도 모듈로 빌드 할 수 있습니다. 커널 모듈과 정적 링키지 (즉, 커널에 내장 됨)의 주된 근거는 런타임 구성 가능성 (차례로 메모리 효율성을 향상시키는 것)입니다. 선택적 기능, 서비스 및 드라이버는 부팅 된 커널에서 제외 될 수 있지만 필요할 때 나중에로드 할 수 있습니다.

로드 가능한 모듈은 적절한 실행을위한 요구 사항 연결 때문에 커널에 "종속"됩니다. "칩 및 보드 지식"의 정도는 분명히 다른 커널 코드와 마찬가지로 모듈의 기능에 달려 있습니다.

내가 미리 만들어진 rootfs

커널 이미지 (미리 만들어진) rootfs 이미지를 참조하고 rootfs 말

부록은"완전히 독립적 인"아니다.
rootfs 이미지의 실행 가능 바이너리와 공유 라이브러리는 커널 기능과 호환 가능해야합니다.커널 로딩 가능 모듈은 커널 이미지가 아닌 rootfs에 설치되고 커널 모듈의 특정 빌드에 엄격하게 묶일 수 있기 때문에 커널 이미지와 rootfs 이미지를 쌍으로 만드는 것이 좋습니다.

+0

답변 해 주셔서 감사합니다. 한가지, 내가 rootfs라고 말할 때 미리 만들어진 rootfs를 가리키며 어떤 파일 시스템이 아닌지를 말하고 있습니다. – user2205930

+0

@ user2205930 - 추가 정보를 참조하십시오. – sawdust