2014-02-27 2 views
1

임베디드 암 리눅스 보드에 사용 된 모든 드라이버를 플랫폼 디바이스로 정의하기 위해 다음을 참조하고 있습니다. 이것들을 제안하십시오.- 리눅스 커널에 플랫폼 디바이스를 정의했습니다.

http://thomas.enix.org/pub/conf/rmll2010/kernel-architecture-for-drivers.pdf

=============== 정의 플랫폼 드라이버 ==================

static struct platform_driver serial_imx_driver = { 
.probe = serial_imx_probe, 
.remove = serial_imx_remove, 
.driver = { 
.name = "imx-uart", 
.owner = THIS_MODULE, 
}, 
}; 
플랫폼 장치를 정의

================= ================

static struct platform_device imx_uart1_device = { 
.name = "imx-uart", 
.id = 0, 
.num_resources = ARRAY_SIZE(imx_uart1_resources), 
.resource = imx_uart1_resources, 
.dev = { 
.platform_data = &uart_pdata, 
} 
}; 

==== ==== 커널 시작 코드 위치 - /arch/arm/mach-imx/mx1ads.c ===========

static struct platform_device *devices[] __initdata = { 
&cs89x0_device, 
&imx_uart1_device, 
&imx_uart2_device, 
}; 



static void __init mx1ads_init(void) 
{ 
[...] 
platform_add_devices(devices, ARRAY_SIZE(devices)); 
[...] 
} 
MACHINE_START(MX1ADS, "Freescale MX1ADS") 
[...] 
.init_machine = mx1ads_init, 
MACHINE_END 

===============================

리눅스/드라이버/폴더에서

내가 10 개 폴더가있는 경우 10 가지 플랫폼 드라이버. 커널 소스에 6 개의 드라이버 만 포함 시키길 원하십니까? 그럼 커널에 어떤 드라이버를 포함 시킬지 알게 되나요?

플랫폼 드라이버가 모듈로 컴파일되거나 커널에서 정적으로 컴파일됩니까?

platform_add_devices() 시스템 호출로 전화를하면 어떻게됩니까?

platform_add_devices() 시스템 호출을 호출하기 전에 커널에 포함 된 모든 플랫폼 드라이버가 ram에로드됩니까?

커널 소스의 경로/파일은 임베디드 리눅스 시스템에서 사용되는 모든 플랫폼 장치를 정의 할 수 있습니다 (보드에 사용 된 모든 플랫폼 장치가 설명되는 것을 의미)?

답변

3

기본적으로 플랫폼 드라이버는 보드 파일에 등록되어 있습니다 (예 : /arch/arm/mach-imx/eukrea_mbimx27-baseboard.c). 최신 시스템은 Device Tree 접근 방식을 사용합니다.

드라이버를 컴파일하려면 먼저 선택해야합니다 (예 : make menuconfig 통해). 따라서 6 개의 드라이버를 선택하면 6 개의 드라이버가 컴파일됩니다.

platform_add_devices()은 플랫폼 드라이버를 등록하고 (목록에 추가, drivers/base/platform.c 참조) 커널이 부팅 단계에서 초기화 할 것을 알 수 있도록합니다.

플랫폼 드라이버는 커널의 일부이므로 커널 이미지 자체가로드 되 자마자 RAM에 있습니다.

자세한 내용은 article을 참조하십시오.

+0

현대 시스템 보드 파일에는 장치 트리가 포함되어 있거나 장치 트리가 uboot에 의해 커널에 전달됩니까? ... 또한 make menuconfig를 사용하여 드라이버를 선택하라고했습니다 ... 플랫폼 드라이버가 커널에 없다고 가정합니다.이 경우에는 커널 소스에서 makefile을 수정하여 정적으로해야합니다. ? – Katoch

+0

디바이스 트리 접근 방식을 사용하면 기본적으로 커널 이미지와 디바이스 트리 blob ('* .dtb') 두 개의 파일이 있습니다. 두 파일 모두 u-boot에 의해로드됩니다. 커널 드라이버를 추가하려면이 [answer] (http://stackoverflow.com/questions/11710022/adding-new-driver-code-to-linux-source-code)를 참조하십시오. – yegorich

관련 문제