日期:2014-05-16  浏览次数:20611 次

关于串口驱动的的疑问
static int __init s3c2440_serial_init(void)  
{ //初始化模块 ,注册平台驱动 
  return s3c24xx_serial_init(&s3c2440_serial_driver, &s3c2440_uart_inf);  
}  
这里内核源码中的串口驱动的模块初始化函数,这里只注册了平台驱动,为什么没有注册平台设备

------解决方案--------------------
arch/arm/palt-s3c24xx/devs.c静态注册uart,不知道是不是你想要的
------解决方案--------------------
static struct uart_driver s3c24xx_uart_drv = {
.owner = THIS_MODULE,
.dev_name = "s3c2410_serial",
.nr = CONFIG_SERIAL_SAMSUNG_UARTS,
.cons = S3C24XX_SERIAL_CONSOLE,
.driver_name = S3C24XX_SERIAL_NAME,
.major = S3C24XX_SERIAL_MAJOR,
.minor = S3C24XX_SERIAL_MINOR,
};
static int __init s3c24xx_serial_modinit(void)
{
ret = uart_register_driver(&s3c24xx_uart_drv);
}
module_init(s3c24xx_serial_modinit);
module_exit(s3c24xx_serial_modexit);
------解决方案--------------------
2.6.30.9内核 在mach-smdk2440.c文件里面,所有的平台设备在这里注册。
static struct platform_device *smdk2440_devices[] __initdata = {
&s3c_device_usb,
&s3c_device_lcd,
&s3c_device_wdt,
&s3c_device_i2c0,
&s3c_device_iis,
&s3c_device_rtc,
&s3c_device_usbgadget,
&s3c_device_spi0,
};
static void __init smdk2440_machine_init(void)
{
s3c24xx_fb_set_platdata(&smdk2440_fb_info);
s3c_i2c0_set_platdata(NULL);

platform_add_devices(smdk2440_devices, ARRAY_SIZE(smdk2440_devices));
smdk_machine_init();
s3c_device_spi0.dev.platform_data=&s3c2410_spi0_platdata;
spi_register_board_info(s3c2410_spi0_board,ARRAY_SIZE(s3c2410_spi0_board));
}
------解决方案--------------------
mach-smdk2440.c
static void __init smdk2440_map_io(void)
{
s3c24xx_init_io(smdk2440_iodesc, ARRAY_SIZE(smdk2440_iodesc));
s3c24xx_init_clocks(12000000); /*modify for FL2440 -LineTech*/
s3c24xx_init_uarts(smdk2440_uartcfgs, ARRAY_SIZE(smdk2440_uartcfgs));
}
或许这个是线索,这些代码都在平台设备初始化的文件内