Linux下串口、网卡驱动
来源:互联网 发布:四川水利水电预算软件 编辑:程序博客网 时间:2024/05/21 22:52
一、串口
1、一台有输入、显示部件,然后能够连接的计算机的设备叫做终端。Linux中用tty表示终端。控制台和终端相比只是多了一项功能,它可以显示系统信息,比如内核消息、后台服务消息。启动Linux内核前传入的命令行参数“console=…”就是用来指定控制台。
2、串口也是一种终端设备,在基本硬件操作的基础上,还增加了很多软件功能。驱动程序从上到下分为四层:终端设备层、行规层、串口抽象层、串口芯片层。
drivers/serial下串口芯片层各芯片具体函数抽象为drivers/serial下serial_core.c和serial_core.h,字符设备集中于drivers/char。行规层指定数据交换的规则,比如接收到TAB转换为8个空格,接收到Ctrl+C转换为SIGINT。终端设备层向上提供统一的设备接口,使得用户不必关心具体终端的类型。
3、串口接收数据,以接收ls为例
(1)shell一直休眠,串口接收‘l’,保存(缓冲区)、回显
(2)接收‘s’保存、回显
(3)接收回车符唤醒shell进程,shell读取保存的“ls”,进一步处理
二、网卡
内核空间即网络子系统。
系统调用接口:为用户空间的应用程序提供一种访问内核网络子系统的方法。
协议无关接口:提供通用方法使用底层传输层协议。
网络协议:实际协议如TIC/IP、UDP
设备无关层:提供各个设备驱动程序通信的通用接口。
设备驱动程序:移植重点,每个设备具体的驱动程序。
如网卡dm9000,源文件位于/driver/net/dm9000.c(具体操作函数)。既可以编进内核也可以编译成一个模块。入口函数都是dm9000_init
//向内核注册平台驱动dm9000_driver//名称为dm9000,如果内核中有该设备,就会调用dm9000_probe函数dm9000_init(void){ printk(KERN_INFO "%s Ethernet Driver\n", CARDNAME); return platform_driver_register(&dm9000_driver); /* search board and register */}static struct platform_driver dm9000_driver = { .driver = { .name = "dm9000", .owner = THIS_MODULE, }, .probe = /driver/net/dm9000.c, .remove = dm9000_drv_remove, .suspend = dm9000_drv_suspend, .resume = dm9000_drv_resume,};
1、增加DM9000平台设备
(1)增加平台设备结构,在arch\arm\plat-s3c24xx\common-smdk.c
//确定该设备使用的资源#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)/* DM9000 */static struct resource s3c_dm9k_resource[] = { [0] = { .start = S3C2410_CS4, /* ADDR2=0,发送地址时使用这个地址 */ .end = S3C2410_CS4 + 3, .flags = IORESOURCE_MEM, }, [1] = { .start = S3C2410_CS4 + 4, /* ADDR2=1,传输数据时使用这个地址 */ .end = S3C2410_CS4 + 4 + 3, .flags = IORESOURCE_MEM, }, [2] = { .start = IRQ_EINT7, /* 中断号 */ .end = IRQ_EINT7, .flags = IORESOURCE_IRQ, }};
(2)加入内核设备列表,也在arch\arm\plat-s3c24xx\common-smdk.c
static struct platform_device __initdata *smdk_devs[] = { &s3c_device_nand, &smdk_led4, &smdk_led5, &smdk_led6, &smdk_led7,#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE) &s3c_device_dm9k,#endif #ifdef CONFIG_SERIAL_EXTEND_S3C24xx &s3c_device_8250,#endif#ifdef CONFIG_TOUCHSCREEN_S3C2410 &s3c_device_ts,#endif};
(3)修改/driver/net/dm9000.c中dm9000_probe、dm9000_reset、dm9000_open(注册中断等)等函数。
2、使用网卡
在内核根目录下执行 make menuconfig 在图像界面中配置网卡(选择编译进内核或编译成模块)然后执行 make uImage 在arch/arm/boot/uImage生成内核镜像
- Linux下串口、网卡驱动
- linux下串口驱动
- Linux下无线网卡驱动
- Linux下更新网卡驱动
- Linux下串口驱动解析
- Linux下DM9000网卡驱动实验
- Linux下安装USB网卡驱动
- linux下安装Marvell Yukon网卡驱动
- linux下安装无线网卡驱动
- Linux 系统下无线网卡驱动安装
- Linux下安装无线网卡驱动
- 编写Linux网卡设备驱动(下)
- Linux下DM9000网卡驱动实验
- 编写Linux网卡设备驱动(下) .
- linux下无线网卡驱动的解决
- linux下安装无线网卡驱动
- Linux下无线网卡驱动的解决
- 编写Linux网卡设备驱动(下)
- 内存对齐方式
- 【算法】变态跳台阶问题
- 栈
- 十四、吉比特2017秋招<求素数>
- Eclipse中的maven项目没有部署成功
- Linux下串口、网卡驱动
- 关于Fragment返回按键监听
- JS动态增删样式单
- 关于configure和Makefile
- SSM框架
- 土木工程项目管理系统engineercms
- Socket网络通信
- 编程之美
- 约瑟夫问题(Josephus problem)