[mini2440]内核源码驱动阅读
mini2440所有驱动都有共同的地方(linux-2.6.32.2\arch\arm\mach-s3c2440\mach-mini2440.c)。
1.网卡驱动.
a.使用 dm9000.
代码路径:
linux-2.6.32.2\drivers\net\dm9000.c 网卡的全部操作硬件的驱动。
linux-2.6.32.2\arch\arm\mach-s3c2440\mach-mini2440.c 主要功能是把网卡添加到总线。
b.网卡驱动如何与TCP/IP协议进行联系。
是通过 net/core/dev.c 来实现的, 它是linux抽象出的一个核心网络设备, 用来连接网络协议栈和网卡驱动, 这个core-dev 提供了一个net_device_ops数据结构, 由具体的网卡驱动来填充这个接口, 比如上面提到的 static const struct net_device_ops dm9000_netdev_ops = { .ndo_open = dm9000_open, 这个动作就是实现core-dev的ndo_open动作。 你可以研究下loopback设备, 这个有助于你理解linux协议栈与网卡驱动间的关系, 以及ifconfig这些命令的实现原理。
2.屏幕驱动。
\linux-2.6.32.2\drivers\video\s3c2410fb.c
参考:https://www.linuxidc.com/Linux/2011-10/44431.htm
Linux-4.9.2内核在mini2440上的移植(九)——LCD驱动移植 https://blog.csdn.net/zl199203/article/details/78141947
程序基本结构
1.模块初始化-->向platform核心注册自己
2.实现linux设备模型必须的probe函数-->向frambuffer核心注册自己(最重要)
resume函数-->系统在由挂起恢复的时候调用
suspand-->系统在挂起的时候调用
remove--> 驱动程序注销自己的时候调用
3.frambuffer驱动模型fb_ops各函数的实现-->实现fb驱动的ioctl命令需要的函数
mini2440lcd驱动分别涉及到了platform和frambuffer核心,利用这两个核心实现其功能。
3.GPIO驱动
路径:
linux-2.6.32.2\drivers\char\mini2440_leds.c
linux-2.6.32.2\drivers\char\mini2440_pwm.c
linux-2.6.32.2\drivers\char\mini2440_buttons.c
linux-2.6.32.2\arch\arm\plat-s3c24xx\gpio.c
参考:Linux-2.6.32.2内核在mini2440上的移植(十五)---移植LED驱动
http://www.eeworld.com.cn/mcu/article_2016120431925.html
4.串口驱动
参考:基于Linux-2.6.32.2在mini2440驱动分析一:串口驱动 https://blog.csdn.net/yuesichiu/article/details/8189336
路径: linux-2.6.32.2/drivers/serial/s3c2440.c
(end)