早天在新蛋上入手了Acer Aspire 4736ZG本本一台,T4200、1G、NV105M、250G,带蓝牙摄像头等,3600,还送了一台水星无线路由。低端本本为了降低成本,很多都是不装Windows的,这款也是,本来以为原装系统都是Linux,应该对Linux兼容不错的啦,那天到提货点验本本时候,运行一看,傻了,那个什么Linpus,2.6.15的内核,没带X,lshw没有,lspci没有,hwinfo更没有,总之就没什么东西好看的,除了黑漆漆的画面告诉我屏幕没坏点,就匆匆打上包回来了。 第一件事就是用Arch 09.08的Live CD启动重新分区,顺便装好core,但是启动后又傻了,连不上有线网卡……这款机器的网卡是Atheros AR8132的千兆卡,不知道是太新还是太罕见。几经折腾后发现规律:完全关机重开后,Arch就能认到网卡,ipconfig -a能看到eth0,但是ifconfig eth0 up了之后,是这个样子的: eth0 Link encap:Ethernet HWaddr 00:26:18:80:C5:AB UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:4294967293 errors:4294967278 dropped:4294967290 overruns:4294967293 frame:4294967281 TX packets:4294967293 errors:4294967284 dropped:0 overruns:4294967293 carrier:4294967291 collisions:4294967281 txqueuelen:1000 RX bytes:4294967293 (4095.9 Mb) TX bytes:4294967293 (4095.9 Mb) Interrupt:28 大堆奇怪的数字,这时候不管dhcp还是手动指定IP,都没法正常工作的,如果这时重启,好,完全认不了网卡了,又要完全关机再开一次。 这个问题在Arch论坛上面也有人碰到,他的是华硕eeePC 1005HA,也是上个月的帖子。[详细情况帖子里面比较完备,但是,未解决] 于是我就转战Ubuntu。Ubuntu 9.04的Live CD版本也是没能驱动好这块网卡的,但是这里找到解决方法,总之就是到Atheros官网下载网卡的驱动,编译,挂载驱动模块,幸好Ubuntu的Live CD跟初始系统都带了GCC和Make utils,编译安装过程倒没什么波折,很快就折腾好连上网了。呃,怎么这么简单?于是试试在台式机的Arch上面编译了这个atl1c.ko,哇,一开始就一屏幕的错误……后来发现这个是这个驱动跟内核兼容问题,Ubuntu好像专门有补丁搞定的,Ubuntu 9.04把内核升级到2.6.28.15-generic网卡就完全正常了,也顺便下载了9.10的Live CD,直接iso启动,发现虽然是31内核,但是网卡工作也正常……好吧……看来要么等kernel彻底搞定这块网卡的驱动,不然只能自己找Ubuntu的patch来编译才能跑Arch了…… Ubuntu很是省心,挂上受限驱动什么3D特效全都出来了,跑了下glxgears,大概2600fps,比台式机的集显好一点吧……7025只有1300左右的fps;更新了一下系统,用Ubuntu [...]
为1602ALCD屏幕实现的基本驱动功能,8位数据线,3位控制线,可自定义端口,可从LCD_Init函数设定工作方式,实现发送单字符和字符串的基本功能,带busy_wait。使用avr-gcc 编译。 代码下载:http://code.google.com/p/ptcoding/source/browse/trunk/AVR 更新:SVN目录内还有串口通讯的模块,以及串口和LCD驱动结合起来的一个试验性程序 参考资料:lcd1602a_398762.pdf(英文) ourAVR (注意两份资料的出入,前者更详细) 开发手记: 之前从天河赛格买了个1602的液晶屏,折腾了两天,终于让ATmega48驱动起来。 1602本来是一个挺简单的器件,8位数据线和3位控制线,其工作时序图初看起来挺复杂,但其实也就E端使能脉冲的事情,但是折腾下来,再一次验证了“简体中文”资料的不可靠,还有就是“这就是传说中的‘驱动程序’”。 首先我是从ourAVR网站提供的1602B液晶使用范例提供的资料入手(1602A、B好像没太大区别),借鉴了人家用ICCAVR写的代码(虽然代码是我敲的,但是基本上还是抄的),当LCD上显示出第一个字母时,还挺兴奋的,然而,这只是刚刚开始……(才100多行代码,加上看资料个把小时什么都好了。) 接下来才是噩梦般的调试,要么给黑方块,要么乱码,不稳定,这次能显示,重启就不行……还是ourAVR那篇资料提醒了我,初始化工作做的不够,写个循环发20次初始化信号,果然稳定了…… 奇怪阿,我明明按照Datasheet的数据来写的,怎么初始化不够呢?……说起1602的Datasheet,ourAVR那里提供了一份中文版,由“长沙太阳人电子有限公司”整理的,区区5页PDF,我另外Google了一份英文版的,顶,80多页,仔细一看,时序图居然有出入!转念一想,1602作为一种标准产品,一般的厂商只是兼容罢了,有多少出入还是正常的吧?不能全相信网上的Datasheet... 也从网上找了其他人写的1602驱程,51的、汇编的什么都来,有些的E使能脉冲居然是下降沿的,如此借鉴来借鉴去,折腾了两天。 最后还是被编译器“跹”了一回,比如把字符串写在发送函数的参数里就给我显示黑方块、乱码,又看了半天AVR的Flash空间、SRAM空间、EEPROM空间等的一大堆,最后才确定,是因为我使用之前《初尝Linux下的AVR单片机开发》里面的avr-objcopy -j .text参数,导致被放在.data段的字符串根本没有放到烧录文件内。 最后还有时序问题。一开始我使用了Busy Wait(读LCD的D7),认为以后就不用考虑命令时序了(LCD接受的命令有us级的一般命令ms级的两条清屏命令),结果还是乱的一团糟,最后往Busy Wait里面放了个死循环,发现程序根本都不绕进去,原来AVR芯片太快的,输出E信号后等不及LCD输出。 其他人写的驱动中,有些根本不考虑Busy标志的问题(干脆R/W接地),只要等候的时间足够,就可以保证写入的正常。在我最后写好的驱动中,我尝试把调用LCD_Busy_Wait的地方换成_delay_ms(5),把整个LCD_Busy_Wait注释掉,这样工作起来是完全正常的,而且还省了36字节的程序,只是感觉上屏幕的反应就有那么一点的拖滞感。也可以把这个delay换成_delay_us(100),这样没有拖滞感,但注意0x01这样的复位命令要注意要加个ms级的延时,但如果这样的延时语句多几条,程序在延时上膨胀的体积就远不止36字节了(别小看_delay_ms(),延时越久代码就越大),还不如用上Busy_Wait,这就需要应用在的来衡量了。
目前Ubuntu 8.10中提供的最新Nvidia显卡驱动依然是180.11,除了不支持一些新的显卡,缺乏一些功能,在有些平台上也不稳定,容易Crash。很多人都用上Nvidia官网版的驱程,可是每当系统更新内核的时候,不得不回到console重新安装一次Nvidia,虽然不是很复杂,但长久如此,也挺麻烦的。 UbuntuForums上面一个Howto介绍了解决方法,下面简述之: 本方法不适合使用EnvyNG安装的驱动。 确保你全手动安装过Nvidia驱动并确定你所用的版本正常工作。 把NV的驱动安装文件复制到/usr/src,同时建立一链接。 sudo mv NVIDIA-Linux-x86-180.37-pkg1.run /usr/src sudo ln -s /usr/src/NVIDIA-Linux-x86-180.37-pkg1.run /usr/src/nvidia-driver 我安装的是180.37版本,注意不同版本的文件名不同。链接的作用是以后如果换一个新版的驱动进来,修改该链接即可,不用修改下面的脚本。 保存下面的代码为文件update-nvidia #!/bin/bash # # Set this to the exact path of the nvidia driver you plan to use # It is recommended to use a symlink here so that this script doesn't # have to be modified when you [...]
Page optimized by WP Minify WordPress Plugin