임베디드 암 리눅스 보드에 사용 된 모든 드라이버를 플랫폼 디바이스로 정의하기 위해 다음을 참조하고 있습니다. 이것들을 제안하십시오.- 리눅스 커널에 플랫폼 디바이스를 정의했습니다.
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에로드됩니까?
커널 소스의 경로/파일은 임베디드 리눅스 시스템에서 사용되는 모든 플랫폼 장치를 정의 할 수 있습니다 (보드에 사용 된 모든 플랫폼 장치가 설명되는 것을 의미)?
현대 시스템 보드 파일에는 장치 트리가 포함되어 있거나 장치 트리가 uboot에 의해 커널에 전달됩니까? ... 또한 make menuconfig를 사용하여 드라이버를 선택하라고했습니다 ... 플랫폼 드라이버가 커널에 없다고 가정합니다.이 경우에는 커널 소스에서 makefile을 수정하여 정적으로해야합니다. ? – Katoch
디바이스 트리 접근 방식을 사용하면 기본적으로 커널 이미지와 디바이스 트리 blob ('* .dtb') 두 개의 파일이 있습니다. 두 파일 모두 u-boot에 의해로드됩니다. 커널 드라이버를 추가하려면이 [answer] (http://stackoverflow.com/questions/11710022/adding-new-driver-code-to-linux-source-code)를 참조하십시오. – yegorich