LPC2478远程温度监控(8)

2019-03-03 18:38

桂林电子科技大学毕业设计(论文)报告用纸 第 36 页 共 56 页

在driver/mtd/maps目录下在makefile中加上 obj-$(CONFIG_MTD_ARM_LPC2468NOR)+= lpc2468nor.o

编译配置选项:

图4.2

图4.3

36

桂林电子科技大学毕业设计(论文)报告用纸 第 37 页 共 56 页

图4.4

注:将drivers/mtd/chips/jedec_probe.c用linux2.6.29(或更高版本)内核中的jedec_probe.c去替换否则编译会出错。

最后make linux即可编译出内核镜像。

内核启动nor flash信息:

LPC2468-NOR:0x00200000 at 0x80000000

lpc2468nor_flash: Found 1 x16 devices at 0x0 in 16-bit bank Amd/Fujitsu Extended Query Table at 0x0040 number of CFI chips: 1

cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness. static_partitions

LPC2468-NOR:using static partition definition Creating 3 MTD partitions on \0x00000000-0x000d0000 : \0x000d0000-0x00180000 : \0x00180000-0x00200000 : \4.2.3 JFFS2文件系统的制作

上一节已经完成了nor flash 驱动的移植,这一节是在此基础上制作JFFS2文件系统。 在uClinux-dist/venders/NXP/LPC2468/Makefile中加上MTD设备: tty,c,5,0 console,c,5,1 cua0,c,5,64 cua1,c,5,65 \\ \\ mtd0,c,90,0 mtd1,c,90,2 mtd2,c,90,4 mtd3,c,90,6 \\ \\ mtd4,c,90,8 mtd5,c,90,10 mtd6,c,90,12 mtd7,c,90,14 \\ \\ mtdblock0,b,31,0 mtdblock1,b,31,1 mtdblock2,b,31,2 mtdblock3,b,31,3 \\ \\

37

桂林电子科技大学毕业设计(论文)报告用纸 第 38 页 共 56 页

mtdblock4,b,31,4 mtdblock5,b,31,5 mtdblock6,b,31,6 mtdblock7,b,31,7 \\ \\

mem,c,1,1 kmem,c,1,2 null,c,1,3 ram0,b,1,0 \\ 用一个shell脚本即可实现系统启动后可以JFFS2自动挂载到/mnt 目录。 在uClinux-dist/venders/NXP/LPC2468/rc 中添加: hostname LPC2468 By piaozhiye /bin/expand /etc/ramfs.img /dev/ram1 mount -t proc proc /proc mount -t ext2 /dev/ram1 /var mkdir /var/tmp mkdir /var/log mkdir /var/run mkdir /var/lock mkdir /var/empty ifconfig lo 127.0.0.1 #httpd & cat /etc/motd /bin/sh

mount -t jffs2 /dev/mtdblock3 /mnt

注意挂载的顺序,要在shell启动之后再挂载,否则系统启动后,虽然可以挂载,但是/mnt还是只读的。如下图:

图4.5

可见JFFS2是可写的启动之后也可以看见jffs2_test,说明JFFS2制作成功。

4.3 Linux网卡驱动移植

网络设备是Linux标准类设备之一,也是非常重要的一类设备。网络设备将数据发送到网络,或者接收来自网络的数据。网络驱动程序用到的重要数据结构有sk_buff和net_device。

38

桂林电子科技大学毕业设计(论文)报告用纸 第 39 页 共 56 页

sk_buff结构表示接收或发送数据包的包头信息,并包含很多成员变量供网络代码中的各子系统使用。这个结构被网络的不同层(MAC或者其他二层链路协议,三层的IP,四层的TCP或UDP等)使用,并且其中的成员变量在结构从一层向另一层传递时改变。

网络设备数据结构net_device是网络驱动程序的最重要的部分,也是理解Linux网络接口的关键。所有的网络设备的信息和操作都保存在设备数据结构中。每注册一个网络设备,都需要提供数据结构中各个域的数据。

4.3.1 网卡初始化

驱动程序加载时,初始化执行lpc2xxx_eth_init 函数,该功能由驱动程序中的module_init(lpc2xxx_eth_init)语句指定。lpc2xxx_eth_init 函数调用platform_driver_register函数对lpc2xxx_eth_driver中保存的信息进行注册,lpc2xxx_eth_driver中包含如下信息:

static struct platform_driver lpc2xxx_eth_driver = {

.probe .remove .resume .driver },

= lpc2xxx_eth_probe, = lpc2xxx_eth_remove, = lpc2xxx_eth_resume, = {

.suspend = lpc2xxx_eth_suspend,

.name = DRV_NAME, .owner = THIS_MODULE,

};通过注册,指定probe,remove,suspend,redume等操作所对应的函数,以及驱动器名

称。例如,设备probe采用函数lpc2xxx_eth_probe,驱动器名称为MODNAME。其中,lpc2xxx_eth_remove函数注销设备、释放中断、释放虚拟地址、停止时钟、释放网络设备;lpc2xxx_eth_suspend函数停用时钟并关闭设备,将设备从激活队列中撤出,不允许网卡收发包;lpc2xxx_eth_resume函数使能时钟并对设备进行复位和初始化,将设备加入激活队列,允许网卡收发包lpc2xxx_eth_probe函数获取平台资源(例如IO地址)、中断号、分配网络设备数据结构、获得网卡私有数据结构的起始地址、初始化自旋锁、获取设备时钟、使能网络时钟、映射虚拟地址、申请使用IRQ并注册中断处理程序、设置驱动函数等。例如,设置如下的驱动函数:

dev->open = lpc2xxx_eth_open;

dev->stop = lpc2xxx_eth_close;

39

桂林电子科技大学毕业设计(论文)报告用纸 第 40 页 共 56 页

dev->hard_start_xmit = lpc2xxx_eth_tx; dev->get_stats = lpc2xxx_eth_stats; dev->set_mac_address = set_mac_address; dev->ethtool_ops = &lpc2xxx_eth_ethtool_ops; dev->do_ioctl = lpc2xxx_eth_ioctl;

指定系统调用的入口函数。

4.3.2 网卡打开

打开函数lpc2xxx_eth_open在网络设备驱动程序里是网络设备被激活的时候被调用的,所以实际上很多在初始化的工作可以放到这里来做。lpc2xxx_eth_open函数使能网络时钟、复位和初始化以太网、开启网络接口接收和发送数据队列。

4.3.3 网卡发送

lpc2xxx_eth_tx函数将sk_buff *skb结构中存放的报文发送到网卡硬件。发送函数进行下面几步处理:

(1) 获得下一个发送缓冲区索引; (2) 设置控制器为“发送”; (3) 将数据拷贝到DMA缓冲区中; (4) 保存缓冲并将缓冲区计数加1; (5) 启动发送过程。

4.3.4 网卡接收

当发生中断时,中断处理程序_lpc32xx_eth_interrupt判断中断类型,如果是接收中断,则调用_lpc32xx_handle_recv函数,该接收函数的主要功能是从片上数据缓冲区中将数据传送给sk_buff缓冲区。接收处理主要经过下面几步: (1)获取接收缓冲区索引;

(2)获取接收状态,并做错误处理;

(3)将片上缓冲区中数据拷贝到sk_buff结构中,并提交给上层协议。

40


LPC2478远程温度监控(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:国内外润滑油添加剂现状及发展趋势

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: