一种Bootloader层驱动无线网络的方法

文档序号:6549259阅读:556来源:国知局
一种Bootloader层驱动无线网络的方法
【专利摘要】本发明提出了一种Bootloader层驱动无线网络的方法,该方法实现了在Bootloader下的无线通信,即在操作系统启动之前,在硬件结构上实现信息的无线互传,该方法包括:在linux?kernel中对无线网络驱动进行裁剪、重写,裁剪之后的driver文件,包含加载、初始化、打开关闭、数据传输等功能模块;在Bootloader下对网络驱动程序加载的修改设置方法,包括对config命令的预设、裁剪后的driver文件的位置配置。对driver的加载,发生在Bootloader启动的第二阶段,Bootloader顺序启动,加载相对应的网卡接口检测程序,在网卡与接口握手成功后,Bootloader主程序跳转至driver入口,通信开始。
【专利说明】—种Bootloader层驱动无线网络的方法
【技术领域】
[0001]本发明属于操作系统【技术领域】,涉及Boot loader开发技术和无线驱动移植技术。【背景技术】
[0002]Bootloader是在操作系统内核运行起来之前运行的一段小程序,通过这段小程序,可初始化硬件设备、建立内存空间映射图,为操作系统启动提供基本的运行环境。在嵌入式系统中,整个软件系统的加载启动任务都是由Bootloader来完成的。
[0003]Bootloader加载操作系统过程分为两个阶段。第一阶段使用汇编来实现,它完成一些依赖于CPU体系结构的初始化,并调用第二段的代码;第二段则通常使用C语言来实现,这样可以实现更加复杂的功能,而且代码会有更好的可读性和移植性。Bootloader启动的第一阶段中,首先将硬件初始化,为加载Bootloader第二段代码准备RAM空间,复制第二阶段代码到RAM中,设置好栈,跳转到第二阶段代码的C入口点。在第一阶段的进行的硬件初始化一般包括:关闭WATCHDOG,关中断,设置CPU的速度和时钟频率、RAM初始化等等。在Bootloader启动的第二阶段中,Bootloader首先初始化本阶段所要使用到的硬件设备,检测系统内存映射,将内存映像和文件系统从Flash或者server端读取到RAM中并为内核设置启动参数。
[0004]Linux系统下W1-Fi模块正常工作所需的Host驱动包括WLAN和SDIO接口驱动两部分。WLAN驱动在整个数据收发过程中充当数据中转的角色,即接收上层用户应用程序的数据流,通过SDIO 口转发到W1-Fi硬件或响应W1-Fi硬件中断,并从硬件的缓冲区读取数据流,通过驱动程序注册的接口函数,发送到上层应用程序。
[0005]而本发明提出的在Bootloader层驱动无线网络的方法,通过对Iinux操作系统下无线驱动进行裁剪,配置Bootloader结构,使得无线通信在操作系统之上运行,完成系统内核和板级信息的无线加载,提高了网络操作系统的开发效率。

【发明内容】

[0006]本发明要解决的技术问题在于克服上述现有技术的不足,提出一种Bootloader层驱动无线网络的方法,完善Bootloader下对无线驱动的支持,从而提高操作系统的开发效率。
[0007]本发明针对上述技术问题而提出的技术方案包括提出一种在Bootloader层驱动无线网络的方法,该技术方法包括以下步骤:
[0008]S1:在linux kernel中对无线网络驱动进行裁剪、重写,裁剪之后的driver主体,包含加载、初始化、打开关闭、数据传输等基本功能模块;
[0009]S2:对linux kernel中无线驱动程序的裁剪过程中,通过拆分结构体,减少程序跳转,和对重要函数重写的方法实现,剔除系统资源相关元素,剔除总线结构。
[0010]S3:在Boot loader下对网络驱动程序加载的设置方法进行修改,包括对config和makefile配置文件的修改。裁剪后的driver驱动文件位于Boot loader源码包中。无线驱动程序位于Bootloader下drivers文件夹内,包含一个C文件和对应的头文件。无线驱动程序存储与板级flash中,在Bootloader中顺序执行,并且在操作系统启动执行之前,实现数据下载和反馈功能。
[0011]S4:添加对网卡操作的commond指令,无线驱动程序的主程序和头文件由config指令定义时实现封装。
[0012]S5:修改相应板级头文件中对于默认网络驱动程序的指令信息,屏蔽有线加载操作系统的功能,直接跳转至无线加载接口。使Boot loader在顺序执行过程中,首先启动板级硬件,检测网络接口,由网络接口程序跳转至无线驱动接口。
[0013]与现有技术相比,本发明的Uboot下无线网卡通信技术,通过对linux kernel内无线网卡驱动的裁剪与Uboot底层文件的相应配置,使得无线网卡驱动在操作系统启动之前得以运行,实现无线网络驱动脱离系统文件资源运行,节省了网络驱动启动时间,实现了在无操作系统情况下对server端数据的下载通信,提高了网络开发效率。
【专利附图】

【附图说明】
[0014]图1为本发明开发步骤图;
[0015]图2为本发明驱动裁剪流程图;
[0016]图3为本发明无线网卡驱动流程图;
【具体实施方式】
[0017]下面结合一个方法实例对本发明的技术和有益效果进一步进行阐述。
[0018]该实例是基于开发板0K6410,该移动设备平台包括:ARM架构CPU,型号为S3C6410,存储模块为 Nand Flash ;无线模块选用 WM-G-MR-09 (marvel18686)。
[0019]本实例采用Uboot作为Bootloader的实例。驱动无线网络的方法包括在Iinuxkernel中对无线网络驱动进行裁剪、重写。裁剪之后的driver文件包含加载、初始化、打开关闭、数据传输等功能模块;包含在Bootloader下对网络驱动程序加载的修改设置方法;包括对config命令的预设,裁剪后的driver文件的位置配置。
[0020]SlOl:参见图2,对linux kernel中src_8686文件进行裁剪,剔除了系统资源的总线结构、net_device结构体、注册、加载元素,保持驱动在算法上的稳定性。
[0021]S201:在 linux_src_8686 裁剪中,首先修改 wlan_main.c,将 wlan_open()、wlan_close O、wlan_hard_start_xmit ()、wlan_tx_timeout ()、wlan_get_stats ()、wlan_set_mac_address ()、wlan_add_card ()、wlan_remove_card ()、wlan_send_rxskbQ ()、wlan_interrupt ()这些功能函数的wlan_private*priv = dev- > priv ;指针语句,修改为赋值语句 wlan_orivate = priv。
[0022]S202:在 wlan_open()、wlan_close ()、wlan_hard_start_xmit ()、wlan_tx_timeout () > wIan_get_starts/wIan_set_mac_address ()、wlan_add_card() > wlan_remove_card()、wlan_send_rxskbQ()、wlan_interrupt ()这些功能函数中修改为包含如下元素的 struct net_device 结构体:open = wlan_open, close = wlan_close, hard_startxmit=wlan_hard_startxmit.tx_timeout = wlan_tx_timeou, wlan_get_starts, set_mac_address = wIan_set_mac_address, add_card = wlan_add_card, remove_card = wlan_remove_card, send_rxskbQ = wlan_send_rxskbQ, interrupt = wlan_interrupt。去除wlan_cleanup_module ()和 wlan_ins_module ()函数。
[0023]S203:对于wlan_hard_start_xmit (),采用重写的方式,屏蔽掉与总线结构和注册函数以及系统资源调用的元素,仅重写数据接受和传输部分。
[0024]S301:在 smk6410 文件中,将默认的 C0NFIG_DRIVER_CS8900 替换为 C0NFIG_DRIVER_8686,完成对默认网络设备的设置。
[0025]S302:在Uboot的顶级目录下的makefile文件中,添加对无线驱动源码的编译过程。在include/configs目录下的smk6410中的C0NFIG_C0MMANDS的宏定义下添加两个command 命令:wifiopen 和 wificlose。
[0026]S401:在Uboot的include\command.h中定义两个新的cmd_tbl_t结构体,即定义wiflopen和wificlose的命令,在common/cmd_cache.c文件中实现命令的操作函数。
[0027]S501:在include\configs\中修改板级头文件中对于默认网络驱动程序的指令信息。根据uboot的流程,修改main_loop函数,添加wifiopen命令,使得Uboot的lib_arm/board, c的init_sequence数组预先定义的初始化函数,在uboot第二阶段一开始运行,程序跳转至lib_arm\board.c中的start_armboot函数,后续函数继续顺序调用,包括flash_init初始化NOR Flash、env_relocate将环境参数读入内存指定位置。然后Uboot跳转到网络设备初始阶段,将C0NFIG_DRIVER_8686替换,这样当uboot运用接口检测模块检测到sdio_8686网卡后,跳转到8686.c入口。
[0028]S502:对经过上述步骤裁剪过后的linux_src_8686驱动程序,将8686.c和8686.h的两个文件存放于uboot\driver中。在include/cmd_confdefs.h中定义新命令的标志位。
[0029]上述内容,仅为本发明的较佳实施例,并非用于限制本发明的实施方案,本领域普通技术人员根据发明的主要构思和精神,可以十分方便的进行相应的变通或者修改,故本发明的保护范围应以权利要求书所要求的保护范围为准。
【权利要求】
1.一种Bootloader层驱动无线网络的方法,本方法实现了在Bootloader下的无线通信,包括在linux kernel中对无线网络驱动进行裁剪、重写,裁剪之后的driver文件,包含加载、初始化、打开关闭、数据传输等功能模块;在Bootloader下对网络驱动程序加载的修改设置方法,包括对conflg命令的预设,裁剪后的driver文件的位置配置。
2.根据权利要求1所述的方法,其特征在于,无线驱动程序运行于操作系统启动之前,驱动文件位于Bootloader源码包中。
3.根据权利要求1所述的方法,其特征在于,无线驱动程序存储于板级flash中,在Bootloader中顺序执行,在操作系统启动执行之前,实现数据下载和反馈功能。
4.根据权利要求1所述的方法,其特征在于,在command文件中添加对网卡操作的指令。
5.根据权利要求1所述的方法,其特征在于,对linuxkernel中无线驱动程序的裁剪过程中,通过拆分结构体,减少程序跳转,和对重要函数重写的方法实现。
6.根据权利要求1所述的方法,其特征在于Bootloader顺序执行过程中,首先启动板级硬件,检测网络接口,由网络接口程序跳转至无线驱动接口。
【文档编号】G06F9/44GK104007979SQ201410258542
【公开日】2014年8月27日 申请日期:2014年6月12日 优先权日:2014年6月12日
【发明者】熊永华, 吴敏, 王慧昭, 黄素珍, 李天远 申请人:中南大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1