首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于Linux内核的IMX SOC接口UART芯片的主机号分配

用于Linux内核的IMX SOC接口UART芯片的主机号分配
EN

Stack Overflow用户
提问于 2014-12-22 22:54:33
回答 1查看 147关注 0票数 0

我正在开发一个用于外部UART芯片的uart设备驱动程序,该芯片与freescale IMX SOC接口(存储器与地址和数据线映射)。

到目前为止,我使用的是主数字4 (TTY_MAJOR),这是由8250芯片使用的,因为我的系统中没有8250芯片,从数字也是8250使用的相同数字。

请让我知道这个专业编号分配是否正确?

如果这是错误的,请告诉我如何为这个驱动程序分配主号码。

我在linux 3.2内核上工作,我在linux的串行核心子风格下开发这个驱动程序。使用uart_register_driver接口注册uart设备,使用platform_driver_probe接口注册平台驱动。

EN

回答 1

Stack Overflow用户

发布于 2014-12-30 03:31:09

不鼓励静态分配字符设备主/次编号。为了向后兼容,我们保留了静态分配方案,但现在您应该将动态分配与alloc_chrdev_region函数一起使用:

代码语言:javascript
复制
alloc_chrdev_region(&device_node, base_major_number, device_count, device_name);

此函数允许内核在加载模块时为您选择一个空闲的主编号,而不是您必须选择一个编译时常量主编号。

参数:

  1. &device_node

设备节点

  • base_major_number的地址

您请求的最小主机号。内核将查找一个大于或等于此数字的空闲主设备号,并将其分配给您的设备。只需传递0即可为内核提供最大的flexibility.

  • device_count

您的驱动程序正在注册的设备数量-这是您正在注册的次要编号的数量( requesting.

  • device_name

device的名称

在后面的驱动程序中,您可以使用MAJOR()MINOR()宏来提取设备号:

代码语言:javascript
复制
#define DEVNAME "MY_DEV"
#define DEVCOUNT 1

/* within __init routine, assuming you have a static device_node declared
 * elsewhere in your driver
 */

int major_num;
int minor_num;
int alloc_status;

status = alloc_chrdev_region(&device_node, 0, DEVCOUNT, DEVNAME);

if (status){
    printk(KERN_ERR "Registering %s driver failed with code %d.\n", DEVNAME, status);
    /*go perform cleanup for failed major allocation*/
}

printk(KERN_INFO "Allocated %d device(s) at major %d, minor %d.\n", DEVCOUNT, MAJOR(device_node), MINOR(device_node));

我认为对于连接到您的系统上的UART设备,如果您出于某种原因需要静态分配,那么选择主编号4是正确的,但动态分配是首选方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27605091

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档