1. 如何编写网卡驱动程序
实现方法和步骤如下:
1、如果网络设备(包括wireless)是PCI规范的,则先是向内核注册该PCI设备(pci_register_driver),然后由pci_driver数据结构中的probe函数指针所指向的侦测函数来初始化该PCI设备,并且同时注册和初始化该网络设备。
申明为PCI设备:
staticstructpci_drivertg3_driver={
.name=DRV_MODULE_NAME,
.id_table=tg3_pci_tbl,//此驱动所支持的网卡系列,vendor_id,device_id
.probe=tg3_init_one,//初始化网络设备的回调函数
.remove=__devexit_p(tg3_remove_one),//注销网络设备的回调函数
.suspend=tg3_suspend,//设备挂起函数
.resume=tg3_resume//设备恢复函数
};
PCI设备探测函数probe,初始化网络设备:
staticint__devinittg3_init_one(structpci_dev*pdev,conststructpci_device_id*ent)
{
//初始化设备,使I/O,memory可用,唤醒设备
pci_enable_device(pdev);
//申请内存空间,配置网卡的I/O,memory资源
pci_request_regions(pdev,DRV_MODULE_NAME);
pci_set_master(pdev);
//设置DMA属性
pci_set_dma_mask(pdev,(u64)0xffffffffffffffff);
//网卡I/O,memory资源的启始地址
tg3reg_base=pci_resource_start(pdev,0);
//网卡I/O,memory资源的大小
tg3reg_len=pci_resource_len(pdev,0);
//分配并设置网络设备
dev=alloc_etherdev(sizeof(*tp));
//申明为内核设备模块
SET_MODULE_OWNER(dev);
//初始化私有结构中的各成员值
tp=dev->priv;
tp->pdev=pdev;
tp->dev=dev;
……
//锁的初始化
spin_lock_init(&tp->lock);
//映射I/O,memory地址到私有域中的寄存器结构
tp->regs=(unsignedlong)ioremap(tg3reg_base,tg3reg_len);
dev->irq=pdev->irq;
//网络设备回调函数赋值
dev->open=tg3_open;
dev->stop=tg3_close;
dev->get_stats=tg3_get_stats;
dev->set_multicast_list=tg3_set_rx_mode;
dev->set_mac_address=tg3_set_mac_addr;
dev->do_ioctl=tg3_ioctl;
dev->tx_timeout=tg3_tx_timeout;
dev->hard_start_xmit=tg3_start_xmit;
//网卡的MAC地址赋值dev->addr
tg3_get_device_address(tp);
//注册网络设备
register_netdev(dev);
//把网络设备指针地址放入PCI设备中的设备指针中
pci_set_drvdata(pdev,dev);
}
打开网络设备:
/*intrequest_irq(unsignedintirq,
void(*handler)(intirq,void*dev_id,structpt_regs*regs),
unsignedlongirqflags,
constchar*devname,
void*dev_id);
irq是要申请的硬件中断号。在Intel平台,范围0--15。
handler是向系统登记的中断处理函数。
这是一个回调函数,中断发生时,系统调用这个函数,传入的参数包括硬件中断号,deviceid,寄存器值。
dev_id就是下面的request_irq时传递给系统的参数dev_id。
irqflags是中断处理的一些属性。比较重要的有SA_INTERRUPT,
标明中断处理程序是快速处理程序(设置SA_INTERRUPT)还是慢速处理程序(不设置SA_INTERRUPT)。
快速处理程序被调用时屏蔽所有中断。慢速处理程序不屏蔽。
还有一个SA_SHIRQ属性,设置了以后运行多个设备共享中断。dev_id在中断共享时会用到。
一般设置为这个设备的device结构本身或者NULL。
中断处理程序可以用dev_id找到相应的控制这个中断的设备,或者用rq2dev_map找到中断对应的设备。
*/
staticinttg3_open(structnet_device*dev)
{
//分配一个中断
request_irq(dev->irq,tg3_interrupt,SA_SHIRQ,dev->name,dev);
//初始化硬件
tg3_init_hw(tp);
//初始化收包和发包的缓冲区
tg3_init_rings(tp);
//初始化定时器
init_timer(&tp->timer);
tp->timer.expires=jiffies+tp->timer_offset;
tp->timer.data=(unsignedlong)tp;
tp->timer.function=tg3_timer;//超时回调函数
add_timer(&tp->timer);
//允许网卡开始传输包
netif_start_queue(dev);
}
2. 怎样给驱动板写程序我想知道给液晶电视驱动板写程序的操作过程 我是乐华VST29.02B的驱动板 屏是M190Z1_P0
首先看你选择用哪种方式刷程序,可以用USB接口,25针并口,U盘等,像你说的V29我们通常用U盘写(如果板上没USB接口就用自制的转接口(一端插U盘一端连接在板上,也就是4针的通常为兰色的接口。不要说找不到哦,板上4针的接口不多且还标明了的)写)按照你这屏的的型号先拷个M190A1程序到U盘,先插上U盘,再给板供电,当显示灯红绿交替闪烁时就说明正在写程序,当显示灯闪烁的频率加快了时就已经写好了,此时先断电,再拔U盘,之后就可以全部连上看图像对不对了(要连信号线,看有无干扰,非灯管原因引起的图像抖动,分辨率对不对等)。
至此,在写完程序后全部连接上时是要将驱动板、驱屏线、升压板、灯管线及按键上的显示灯(按键可以不要,但显示的状态灯一定要要)连接好(不要把屏线插错了),将板上电压跳到5V,要跳5V哦。
注意,刷好程序连接了全套的东西时在通电瞬间准备好拔电,防止因屏内的短路或因插屏线没插好引起的短路(甚至拿屏线时不小心的粗心大意拿成了反双八的屏线了)乐华板的好处就在这里,特别是PC板在通电很短的短时间内如果显示灯颜色不正常立即断电是绝大多数情况下可以避免烧板或烧屏的
,这也是为什么一定要插指示灯的原因。
至于其它写程序的方式不再累述,能用U盘用U盘,不能用U盘的就用25针并口,因为它便宜。
3. 当笔记本外接一个显示器时,怎么设置外接的显示器驱动程序。
台式电脑连接显示器:
1)先设置分辨率和刷新率,要设置到电视所支持的范围。
2)用VGA线连接,线的长度不要超过6米。
3)连接好以后将电视切换到VGA状态。
4)重新启动电脑。
笔记本连接显示器:
1)先设置分辨率和刷新率,要设置到电视所支持的范围。
2)用VGA线连接,线的长度不要超过6米。
3)连接好以后,将电视切换到VGA状态。
4)按笔记本VGA输出键“FN+ ”笔记本品牌不同,按键设置也不同。
IBM:FN+F7 富士通:FN+F10 戴尔DELL:FN+F8 三星:FN+F4 惠普:FN+F4 华硕:FN+F8 东芝:FN+F5 索尼:FN+F7 宏基:FN+F5/F6 联想:FN+F3。
4. 怎么往显示器驱动板里写程序啊,都需要什么工具啊。 麻烦大神们指点 谢谢
液晶显示器驱动板内的驱动程序,维修店才有的。需要专用工具与屏幕配套程序重刷。网上是找不到的(毕竟那不是用户自已能解决,重要一点那软件可以说是维修工具,没人会放在网上共享的)。如果你有重刷工具,或许我能帮你。
5. 在电脑中如何驱动程序
一、光驱启动
1、联想本本默认是光驱启动,已改动的可再改过来。启动电脑,按F2进入AMI BIOS设置程序主界面,在上方菜单中找到“Boot”选中,回车,在打开的界面中将CD-ROM Drive(光驱启动)用键盘+和-键(F5/F6)设置在最上端,保存退出。
2、将XP安装光盘插入光驱,重启,在看到屏幕底部出现CD……字样的时候,及时按任意键,否则计算机跳过光启又从硬盘启动了。
二、预前安装(不同的系统光盘因设置不同,以下进程可能不一样,但大体相同)
1、扫描后进欢迎安装程序,选安装--回车;
2、检查启动环境--回车;
3、协议,同意,按F8;
4、指定安装到那个分区,C--回车;
5、指定使用文件系统,用FAT32(或NTFS)格式化磁盘分区(C)--回车;
6、进安装程序格式化,创建复制列表,将文件复制到WIN安装文件夹;
7、开始初始化XP相关文件和配置,保存初始化参数,重启。
三、安装向导
1、区域和语言选项—下一步;
2、姓名、公司名称—下一步;
3、产品密钥—下一步;
4、计算机名、管理员密码,下一步;
5、日期和时间设置—下一步;
6、安装网络,选典型 –下一步;
7、工作组和计算机域—下正点;
8、复制文件,安装开始菜童,注册组件,保存设置,删除安装的临时文件,重启。
四、完成安装(这步可以跳过,等以后安装)
1、自动调整分辨率;
2、启用自动更新—下一步;
3、连接到IT—下一步;
4、激活WIN—下一步;
5、谁使用这台计算机—重启。
五、如果是电脑自带的系统光盘,装完后是不会缺什么驱动的,如果不是那冬缺什么驱动装什么驱动。最简单的办法是,从网上下载驱动精灵2008,下载地址:,ttp:// ,下载后打开,点击“Dri……”解压安装,开机上网,打开驱动精灵,在界面中选“驱动更新”,打开“智能识别硬件配置,自动匹配驱动程序并完成更新”去安装驱动。
6. 怎样给驱动板写程序我想知道给液晶电视驱动板写程序的操作过程
首先你得有参驱动这个液晶屏的程序,有了程序要有编程器,可以把这个驱动板上的存储IC取下,也可以在线ISp烧录,还要有电脑,基本的操作要会,如果刷错了知道如何判断,就这样
7. 如何配置驱动程序开发环境
安装以上两款软件到电脑
2
打开vs2010
环境配置
3
新建VC 控制台项目(选择为空项目)
配置属性-常规
配置属性-C/C++-常规
配置属性-C/C++-预处理器
配置属性-C/C++-代码生成
配置属性-C/C++-高级
配置属性-链接器-常规
我们看到路径是…\WXP\i386,意思就是针对Windows XP系统和i386架构CPU,如果想编译其他系统,或者其他CPU的驱动,修改此路径即可。
配置属性-链接器-输入
配置属性-链接器-清单文件
配置属性-链接器-系统
配置属性-链接器-高级
8. 液晶电视万能驱动板怎么写程序
需要准备一个U盘就可以更换所有的LVDS接口的液晶屏程序。
U盘升级方法:
把屏所对应的程序复制到U盘中
把U盘插到板上的USB口上
接上按键板,按住按键板上的任意一个按键再通电,直到看到按键板上的指示灯出现红绿交替闪烁后,再松开按键,直到指示灯闪烁结束后,拔掉电源,再拔掉U盘就OK了,重新通电即可.
9. 如何编写驱动程序
代码:
#include<linux/mole.h>
#include<linux/kernel.h>
#include<asm/io.h>
#include<linux/miscdevice.h>
#include<linux/fs.h>
#include<asm/uaccess.h>
//流水灯代码
#define GPM4CON 0x110002e0
#define GPM4DAT 0x110002e4
static unsigned long*ledcon=NULL;
static unsigned long*leddat=NULL;
//自定义write文件操作(不自定义的话,内核有默认的一套文件操作函数)
static ssize_t test_write(struct file*filp,const char __user*buff,size_t count,loff_t*offset)
{
int value=0;
int ret=0;
ret=_from_user(&value,buff,4);
//底层驱动只定义基本操作动作,不定义功能
if(value==1)
{
*leddat|=0x0f;
*leddat&=0xfe;
}
if(value==2)
{
*leddat|=0x0f;
*leddat&=0xfd;
}
if(value==3)
{
*leddat|=0x0f;
*leddat&=0xfb;
}
if(value==4)
{
*leddat|=0x0f;
*leddat&=0xf7;
}
return 0;
}
//文件操作结构体初始化
static struct file_operations g_tfops={
.owner=THIS_MODULE,
.write=test_write,
};
//杂设备信息结构体初始化
static struct miscdevice g_tmisc={
.minor=MISC_DYNAMIC_MINOR,
.name="test_led",
.fops=&g_tfops,
};
//驱动入口函数杂设备初始化
static int __init test_misc_init(void)
{
//IO地址空间映射到内核的虚拟地址空间
ledcon=ioremap(GPM4CON,4);
leddat=ioremap(GPM4DAT,4);
//初始化led
*ledcon&=0xffff0000;
*ledcon|=0x00001111;
*leddat|=0x0f;
//杂设备注册函数
misc_register(&g_tmisc);
return 0;
}
//驱动出口函数
static void __exit test_misc_exit(void)
{
//释放地址映射
iounmap(ledcon);
iounmap(leddat);
}
//指定模块的出入口函数
mole_init(test_misc_init);
mole_exit(test_misc_exit);
MODULE_LICENSE("GPL");
(9)如何配置屏写驱动程序扩展阅读:
include用法:
#include命令预处理命令的一种,预处理命令可以将别的源代码内容插入到所指定的位置;可以标识出只有在特定条件下才会被编译的某一段程序代码;可以定义类似标识符功能的宏,在编译时,预处理器会用别的文本取代该宏。
插入头文件的内容
#include命令告诉预处理器将指定头文件的内容插入到预处理器命令的相应位置。有两种方式可以指定插入头文件:
1、#include<文件名>
2、#include"文件名"
如果需要包含标准库头文件或者实现版本所提供的头文件,应该使用第一种格式。如下例所示:
#include<math.h>//一些数学函数的原型,以及相关的类型和宏
如果需要包含针对程序所开发的源文件,则应该使用第二种格式。
采用#include命令所插入的文件,通常文件扩展名是.h,文件包括函数原型、宏定义和类型定义。只要使用#include命令,这些定义就可被任何源文件使用。如下例所示:
#include"myproject.h"//用在当前项目中的函数原型、类型定义和宏
你可以在#include命令中使用宏。如果使用宏,该宏的取代结果必须确保生成正确的#include命令。例1展示了这样的#include命令。
【例1】在#include命令中的宏
#ifdef _DEBUG_
#define MY_HEADER"myProject_dbg.h"
#else
#define MY_HEADER"myProject.h"
#endif
#include MY_HEADER
当上述程序代码进入预处理时,如果_DEBUG_宏已被定义,那么预处理器会插入myProject_dbg.h的内容;如果还没定义,则插入myProject.h的内容。