re: hotplug应用实例:自动连接无线网 gouzhuang 2010-10-08 10:36
@ccbcfan
我也注意到这个了。2.6.12的内核有prism54驱动,但似乎只支持PCI卡。所有要用usb,就必须把新的驱动back port到2.6.12,这个任务并不简单。
re: hotplug应用实例:自动连接无线网 gouzhuang 2010-10-07 11:13
@usli
关于USB打印机,2.6.12的内核还不支持。只有把高版本内核的驱动反向移植(back port)过来。tomato支持说明驱动已经被反向移植到2.4内核了。
re: 升级BusyBox gouzhuang 2010-10-07 00:38
@hibaby
dvdplayer除了使用常规内存外还映射了大量的播放机专用硬件的地址空间。通过下面的命令可以查看dvdplayer的内存地址映射情况:
cat /proc/<DvdPlayer 的进程号>/maps
00400000-00cbe000 r-xp 00000000 1f:01 1095 /usr/local/bin/DvdPlayer
10000000-100af000 rw-p 008be000 1f:01 1095 /usr/local/bin/DvdPlayer
100af000-10300000 rwxp 100af000 00:00 0 [heap]
2aaa8000-2aaa9000 rw-s 00000000 00:07 0 /SYSVdeadcafe (deleted)
40000000-70020000 rw-p 40000000 00:00 0
7c7fc000-7c800000 rwxp 7c7fc000 00:00 0
7c9fc000-7ca00000 rwxp 7c9fc000 00:00 0
7cbfc000-7cc00000 rwxp 7cbfc000 00:00 0
7cdfc000-7ce00000 rwxp 7cdfc000 00:00 0
7cffc000-7d000000 rwxp 7cffc000 00:00 0
7d1fc000-7d200000 rwxp 7d1fc000 00:00 0
7d5fc000-7d600000 rwxp 7d5fc000 00:00 0
7d7fc000-7d800000 rwxp 7d7fc000 00:00 0
7d9fc000-7da00000 rwxp 7d9fc000 00:00 0
7dbfc000-7dc00000 rwxp 7dbfc000 00:00 0
7ddfc000-7de00000 rwxp 7ddfc000 00:00 0
7dffc000-7e000000 rwxp 7dffc000 00:00 0
7e1fc000-7e200000 rwxp 7e1fc000 00:00 0
7e3fc000-7e400000 rwxp 7e3fc000 00:00 0
7e5fc000-7e600000 rwxp 7e5fc000 00:00 0
7e7fc000-7e800000 rwxp 7e7fc000 00:00 0
7e9fc000-7ea00000 rwxp 7e9fc000 00:00 0
7ebfc000-7ec00000 rwxp 7ebfc000 00:00 0
7edfc000-7ee00000 rwxp 7edfc000 00:00 0
7effc000-7f000000 rwxp 7effc000 00:00 0
7f1fc000-7f200000 rwxp 7f1fc000 00:00 0
7f83e000-7f853000 rwxp 7f83e000 00:00 0 [stack]
其中仅40000000-70020000这一段就有768M。
re: 升级BusyBox gouzhuang 2010-10-06 23:22
re: 重新编译uClibc gouzhuang 2010-10-06 15:51
@hibaby
我没有试过打开locale,uclibc 0.9.28版对locale的支持可能还不完整,能否工作不好说。以后有时间我准备尝试升级到新版本的uclibc。对于中文文件名的处理,目前我是通过nfs或samba共享在PC上进行文件操作,只要两端都使用相同字符编码(我要utf8)就没有问题。
re: 关于固件制作 gouzhuang 2010-10-06 15:38
@hibaby
你说的ls命令无法识别,是不是显示乱码?其实这是文件名的编码方式和telnet客户端的编码方式不一致造成的,比如文件名用gb2312编码而telnet客户端用utf8编码。这个问题可以通过两端使用一致的编码来解决。但是目前shell下还是不支持输入中文,以及中文文件名自动完成。
re: hotplug应用实例:自动连接无线网 gouzhuang 2010-10-06 13:49
@ccbcfan
我的Netcore NW336网卡在与AP成功连接时会产生linkup事件。似乎你的无线网卡不会产生linkup event。
无线网卡扫描无线网络以及连接到AP需要一定的时间,所以你的mystart脚本应该在iwconfig之后稍微等待一下再启动dhcpc,如下:
ifconfig wlan0 up
iwconfig wlan0 essid "dd-wrt_vap"
sleep 5
/sbin/udhcpc -i wlan0 -t 15 -b -q -s /etc/udhcpc.script >> /var/log/hotplug.log 2>&1
如果修改wifi_monitor,也建议你的注释掉elif那一行后加入一个5秒的sleep
#elif [ "$EVENT" = "net.wlan0.linkup" ] ; then
sleep 5
/sbin/udhcpc -i $INTERFACE -t 15 -b -q -s /etc/udhcpc.script >> $LOG 2>&1
@usli
fat32肯定不行。这个文件系统有不少符号连接,请用ext3文件系统。
re: hotplug应用实例:自动连接无线网 gouzhuang 2010-10-05 21:51
@ccbcfan
请将wifi_monitor第90行的EOF前的所有空格全部删除再试试。如果还不行,请在第2行加入set -x打开trace。
这个脚本我是在busybox 1.15.3下测试过的。你用的是什么版本?
>现在有两个问题需要解决:
>1是插入USB网卡后,无法自动连接AP;
>2是ZD1211B无线网卡还无法在DvdPlayer中调用和配置使用!
第1个问题需要解决wifi_monitor的问题。如果第1个问题解决了,就没有必要在DvdPlayer中配置无线网卡了。我的播放机的DvdPlayer本身就不支持无线网卡配置。
re: 升级BusyBox gouzhuang 2010-10-05 20:42
@hibaby
用华硕的工具链确实会报“unrecognized option `-static-libgcc'”的警告,因为gcc版本很老(2.96),还不支持这个选项,不过这个警告可以忽略。我用自制的工具链(gcc 4.4.2)编译时就无此警告。
关于ps和top显示VSZ大小的问题,我以前没有注意,能说详细一点吗?另外,除了busybox还有其他变化吗?
@易吧软件
多谢指正,我确实漏写了/tmp/usbmounts/sda1。已经在博文中修正。
@fourcute
可以把下面的命令加入/usr/local/etc/rcS脚本的最前面:
/sbin/insmod /path/to/venus_ir_new.ko
影子驱动是通用的,支持好几种摇控器通讯协议。
re: 好久没有更新了 gouzhuang 2010-09-30 09:36
@ccbcfan
Sorry, 是我的失误:我在strip时给错了参数,把符号表都给删除了。请试一下这个
http://www.cnitblog.com/Files/gouzhuang/zd1211.ko-20100930.zipQQ我会加你为好友,不过QQ我不常用,MSN经常在线,如果你有MSN交流更方便些。
re: 好久没有更新了 gouzhuang 2010-09-29 14:51
@ccbcfan
>我现在用的是新出的T10S(1073DDC+),可以直接ismod挂载吗?
我认为这些新产品在linux内核上不会有大的变化,因此能用的可能性很高,直接用insmod加载即可。如有报错请将错误信息以及dmesg命令输出的相关信息贴出来。
re: 好久没有更新了 gouzhuang 2010-09-28 11:47
@ccbcfan
zd1211的驱动编译好了:
http://www.cnitblog.com/Files/gouzhuang/zd1211.ko-20100927.zip 请测试。
编译很顺利,只修改了Makefile里的编译器设置以及内核路径就一次通过了。
http://sourceforge.net/projects/zd1211/上有个firmware包,可能加载驱动时会用到。
关于播放机以及qemu上的本机编译环境,我需要花点时间整理一下在跟大家分享。
re: 好久没有更新了 gouzhuang 2010-09-27 17:12
@ccbcfan
曾经帮网友老顽童编译了Realtek的8187L的驱动,不知对你是否有用。可在这里下载:
http://www.cnitblog.com/Files/gouzhuang/r8187l.ko.no_modvers.zipZD1211B驱动源码在哪里?我可以试试。
关于转帖我没意见,只要注明出处就行了。
@bgs90@126.com
1. 安装 sdelinux-5.03.06-1.i386.rpm
2. cp /usr/local/lib/gcc-lib/mipsel-linux/2.96-sdelinuxmips-040127/*.o /usr/local/lib/gcc-lib/mipsel-linux/2.96-sdelinuxmips-040127/soft/
3. cd /usr/local/mipsel-linux/; tar xjvf inc_lib.tar.bz2
@bgs90@126.com
在debian系统中应该用下面的命令安装rpm包:
alien -i sdelinux-5.03.06-1.i386.rpm
re: Buildroot - 让交叉编译更轻松 gouzhuang 2010-09-15 08:55
@bgs90
buildroot各版本之间变化比较大,我的补丁几乎可以肯定不适用于新版本。不过我觉得2009.11版已经够用了。
@Tom
Here's the code that does the trick:
--------- CODE BEGIN --------------
typedef void cleanup_fn (void);
static int __init venus_ir_new_init_module(void) {
int result;
struct device_driver *old_driver;
cleanup_fn *venus_ir_cleanup_module;
old_driver = driver_find("VenusIR", &platform_bus_type);
if(old_driver) {
kobject_put(&old_driver->kobj); /* decrease reference count */
printk(KERN_DEBUG "Old VenusIR driver found at %p\n", old_driver);
venus_ir_cleanup_module = (cleanup_fn*)kallsyms_lookup_name("venus_ir_cleanup_module");
if(venus_ir_cleanup_module) {
printk(KERN_DEBUG "Found venus_ir_cleanup_module() @ 0x%p\n", venus_ir_cleanup_module);
(*venus_ir_cleanup_module)();
printk(KERN_DEBUG "venus_ir_cleanup_module() called\n");
} else {
printk(KERN_WARNING "venus_ir_cleanup_module() not found!\n");
return -ENOENT;
}
} else {
printk(KERN_DEBUG "Old VenusIR driver NOT found, no need to clean up\n");
}
/* module initialize code follows */
...
---------- CODE END -------------------
In venus_ir_new_init_module(), I first use driver_find() to search the embedded driver by name, if found, then lookup its cleanup function venus_ir_cleanup_module() in kernel symbol table and call that function to let the old driver cleanup itself. After that, we can go on the normal initialization work.
re: 升级BusyBox gouzhuang 2010-08-19 08:55
@jims
我无法编辑,只能删除了
re: 升级BusyBox gouzhuang 2010-08-18 11:06
@jims
我推测dragon的方法应该是直接修改flash。mac地址应该是保存在flash的第4个分区上。这个分区可以通过设备/dev/mtdblock/3访问。用下面的命令可以抓取这个分区的映像存到usb存储上:
dd if=/dev/mtdblock/3 of=/tmp/usbmounts/sda1/mtd3.img
在映像文件里可用二进制编辑器搜索到MAC地址的字符串,格式为:XX.XX.XX.XX.XX.XX,字母大写。找到这个字符串在文件中的字节偏移量offset。
注意:下面的命令我没有测试过,可能有损坏播放机的风险!!!
用dd命令修改MAC地址(要求echo命令支持-n参数):
echo -n 'XX.XX.XX.XX.XX.XX' | dd of=/dev/mtdblock/3 bs=1 seek=offset
其中offset为前面找到的字节偏移量。
re: 升级BusyBox gouzhuang 2010-08-18 09:13
@jims
1.15.3 ifconfig 有修改mac地址的功能,配置busybox时需要打开下面的ifconfig选项:
Enable option "hw" (ether only)
这个功能还需要网卡驱动程序的支持,在海信的MP800H上我没有试过。
re: hotplug应用实例:自动连接无线网 gouzhuang 2010-07-08 10:05
@lurry
echo /sbin/hotplug > /proc/sys/kernel/hotplug 可恢复系统默认的hotplug程序
re: 升级BusyBox gouzhuang 2010-06-17 17:09
@jackboy
哦,这个我漏掉了。我修改了工具链的一个头文件: /usr/local/lib/gcc-lib/mipsel-linux/2.96-sdelinuxmips-040127/include/limits.h
请打下面的补丁:
--- limits.h.orig 2004-02-12 20:38:47.000000000 +0800
+++ limits.h 2010-03-02 08:53:11.984943511 +0800
@@ -94,5 +94,12 @@
#define ULONG_LONG_MAX (LONG_LONG_MAX * 2ULL + 1)
#endif
+/* Minimum and maximum values a `signed long long int' can hold. */
+#define LLONG_MAX 9223372036854775807LL
+#define LLONG_MIN (-LLONG_MAX - 1LL)
+
+/* Maximum value an `unsigned long long int' can hold. (Minimum is 0.) */
+#define ULLONG_MAX 18446744073709551615ULL
+
#endif /* _MACH_MACHLIMITS_H_ */
#endif /* _LIMITS_H___ */
re: hotplug应用实例:自动连接无线网 gouzhuang 2010-05-26 08:43
@李晓枫
>运行这个gspca.ko这个模块跟内核有关系吗?
这个模块可以在原厂内核上加载。
re: hotplug应用实例:自动连接无线网 gouzhuang 2010-05-26 08:41
@801H
用这个
http://www.cnitblog.com/Files/gouzhuang/hotplug.zip 替换/sbin/hotplug,然后按下面的步骤测试:
usb光驱先不连接播放机,在光驱中放入光盘,然后将光驱连接到播放机。
re: hotplug应用实例:自动连接无线网 gouzhuang 2010-05-21 11:24
@801H
谢谢鼓励!usb光驱已有人成功用手工方式挂载(请参考:
http://www.kboox.com/viewthread.php?tid=5585&page=1#pid22519),所以驱动不是问题。你是希望实现自动挂载吧?
我看了一下hotplug程序的源码,发现支持光驱的代码被有意屏蔽了(代码还在,只是在编译时被忽略)。最简单的办法就是解除屏蔽重新编译hotplug。如果你愿意尝试,我很乐意为你编译。
@ogutsua@gmail.com
for unknown reason, some of your replies were lost. I have sent a message to the administrator, hoping he/she could help to look into this issue. Anyway, if that happens again, you could send email to gouzhuang (at) gmail.com.
re: hotplug应用实例:自动连接无线网 gouzhuang 2010-05-16 16:30
@laowantong
我先尝试了一下从2.6.31的内核backport驱动程序,发现内核已发生了很大的变化,移植难度太大。只好退而求其次,找了一个比较老的版本
http://mxhaard.free.fr/spca50x/Download/gspcav1-20071224.tar.gz, 编译成功了。
模块gspca.ko依赖于videodev.ko,另外两个模块v4l1-compat.ko,v4l2-common.ko没有依赖关系,可能是提供应用程序接口的,我也一起打包了。
下载地址:
http://www.cnitblog.com/Files/gouzhuang/gspca.tar.zip
@ogutsua@gmail.com
In fact I had the same "symbols disagree" problem on my first attempt to compile a module. Later I found the key to circumvent it: disable Module versioning support, i.e. unset CONFIG_MODVERSIONS in .config.
I believe the kernel source I have is NOT exactly the same as the player vendor's, I got it from Asus at the following link:
ftp://ftp.asus.com/pub/ASUS/Digital_Media_Player/HDP-R1/SourceCode/OPlay_HDP-R1_GPL_SourceCode.zip
re: hotplug应用实例:自动连接无线网 gouzhuang 2010-05-14 09:54
@laowantong
OK, I'll look into that later.
re: hotplug应用实例:自动连接无线网 gouzhuang 2010-05-10 16:18
@老顽童
在PC上用ubuntu能驱动吗?如果可以,请找出是由哪个模块驱动的。
@老顽童
>如果没硬件, 用那个什么模拟器, 能够试验IDE的东东么??
恐怕很难用模拟器来试验IDE驱动。
re: hotplug应用实例:自动连接无线网 gouzhuang 2010-05-06 09:13
@老顽童
有驱动程序源码吗?
@老顽童
>在固件M890_V8.2.5R2071上成功了!!!
这是个好消息!我们终于可以为官方内核编译模块了:)。看来关闭符号版本检查是关键。
另外,你说的那个avi文件我下载了,在海信的机子上用我自己编的内核可以播放,没有任何问题。我猜测M890的播放程序依赖内核中的某些功能,而这些功能在华硕的内核源码里没有。
>真的USB DISK都是 ro mount的. 那怎么FAT32可以RW呢? EXT3就只能RO?
那一定是别的程序或脚本将它remount,rw。难道是DvdPlayer?可以试一下stopall停掉DvdPlayer然后再插入fat32 usb disk。
@老顽童
>因为你用的是华硕公布的源码, 我这里估计是MELE的,修改KERNEL不奇怪.
其实源码都来自于realtek,播放机厂家修改内核到可能性不大,很可能是它们拿到了新版的源码。
>能不能把"wake_up_process"去掉? 我不知道它是做什么的.
这个是内核进行进程调度的函数之一,属于核心功能。
>Success (2): 不是说找不到文件么? 会不会我放的地方/usr/local/etc不对?
这个错误代码只是很粗略的分类,在这里到意思应该是:“找不到匹配的符号”。既然dmesg已经指出了wake_up_process版本不匹配,说明模块找到了但在并试图加载时因为这个失败了。
>insmod 有没有要求其他的config文件modules.dep, .alias, etc呢?
没有。
@laowantong
>r8187l: disagrees about version of symbol wake_up_process
这说明官方内核源码的确与我们的不同,某些内核接口发生了变化造成其符号版本不同(符号的版本是其外部接口特征通过某种checksum算法计算得到的)。
我关闭了符号版本检查重新编译了模块,希望它能加载(以前没有试过,不知到能否行得通)。当然这样做是有风险的,很可能官方内核的变化确实已经造成不兼容,强行加载会使内核不稳定!不过试试也无妨。
http://www.cnitblog.com/Files/gouzhuang/r8187l.ko.no_modvers.zip
@老顽童
仔细看了一下你提供的官方内核符号表,发现有些符号在华硕的内核源码里找不到!比如:
AES_H_CTX_Init
AES_H_DigestCleanup
AES_H_DigestFinal
AES_H_DigestInit
AES_H_DigestPeek
AES_H_DigestUpdate
AES_H_InitHash.0
aes_h_md
MARS_AES_H_DigestFinal
MARS_AES_H_DigestUpdate
Mars_aes_h_md
MARS_SHA1_DigestFinal
MARS_SHA1_DigestUpdate
Mars_sha1_md
MCP_aes_h
MCP_AES_H_PADDING
MCP_mars_aes_h
MCP_mars_sha1
MCP_SHA1_DataHash
MCP_SHA1_DataHashTest
MCP_SHA1_Hashing
MCP_SHA1_HASH_INIT
MCP_SHA1_IV_UPDATE
MCP_SHA1_PADDING
SHA1_CTX_Init
SHA1_DigestCleanup
SHA1_DigestFinal
SHA1_DigestInit
SHA1_DigestPeek
SHA1_DigestUpdate
sha1_md
结论:我们手里的源码不是最新的:(
@老顽童
>上次说的, 你编译的kernel 在play avi文件时有点问题
你能肯定跟内核有关吗?用官方的内核能播放吗?
>哦, 还有就是内接IDE盘的问题, 你觉得有希望解决吗?
希望是有的,但是需要深入去看源代码,要花多少时间不好确定,能否解决也没有把握。
>为什么USB的EXT3文件系统总是被mount 成readonly, NTFS系统却会mount 成RW?
从hotplug的源码来看都是mount -o ro的,也许M890厂商修改了源码。要想知道很简单,看看下面命令的输出
strings hotplug|grep mount
如果播放机上没有strings命令就把/sbin/hotplug拷到PC Linux上执行
@老顽童
要用原厂内核必需首先解决模块编译的兼容性问题,否则还会遇到insmod报“Success (8)”的错误。也就是说:你必需知道原厂编译内核所用的.config配置文件。
其实驱动程序的源码不需做额外的移植,只要进行交叉编译就可以了,我做的只是根据我的编译环境修改了Makefile以及修正一个小bug。 这里是完整的补丁:http://www.cnitblog.com/Files/gouzhuang/rtl8187L_linux_26.1039.0104.2010.release.patch.zip
@老顽童
我们的努力总算没有白费,Cheers!
关于无线网的自动配置,可以参考我的文章
http://www.cnitblog.com/gouzhuang/archive/2010/03/26/hotplug.html 。
/sbin/hotplug程序在编译时就把支持的设备列表固化其中了,因此它不会自动加载r8187l。你要么重新编译/sbin/hotplug,要么干脆用r8187l替换r8187。r8187和r8187l的区别我没有去研究,但对你来说完全可以用r8187l替换r8187。方法如下:
1.删除/lib/modules/2.6.12.6-VENUS/kernel/drivers/net/wireless/realtek/rtl8187 目录下的所有内容
2.将r8187l.ko改名为r8187.ko并放入上面的目录
3.删除modules.dep中的原r8187.ko和它依赖的ieee80211_*.ko的内容,并相应修改r8187l.ko的文件名和路径。
4.删除modules.alias和modules.usbmap中有关r8187的内容,并将r8187l改名为r8187
官方固件升级修改内核的可能性不大,因此你可以用我编译的内核和模块去替换。
re: Buildroot - 让交叉编译更轻松 gouzhuang 2010-05-03 11:58
@aaron
>关键是这个参数不知道如何设置export NDAS_KERNEL_PATH=/
这个参数应该设置为OpenWRT的内核源码路径
@老顽童
>epc : 801473fc mod_timer+0x20/0x84 Tainted: PF
>ra : c01969a0 ieee80211_softmac_scan_wq+0x2bc/0x2c4 [r8187l]
按这个线索找下去,比较了一下8187L和8187的源码,在ieee80211_softmac.c第429行发现一个可疑之处:会造成为2.6.12内核编译时生成为2.4内核写的代码,很可能是realtek增加对2.6.20以上内核支持时引入的bug。我把它修改了重新编译,希望能解决问题,否则我也没有办法了。
http://www.cnitblog.com/Files/gouzhuang/r8187l.ko.20100503.zip源码补丁:
http://www.cnitblog.com/Files/gouzhuang/ieee80211_softmac.patch.zip
@laowantong
我意识到我对Makefile的一处修改可能有问题!原来的Makefile中强制gcc产生硬件浮点运算指令: -mhard-float。我知道播放机的CPU是没有浮点运算单元(FPU)的,所以我就简单地把它给注释掉了。现在想想可能正确的做法应该是把它替换成-msoft-float。我加上了-msoft-float重新编译了一下,请你再试一下。
http://www.cnitblog.com/Files/gouzhuang/r8187l.ko.zip
@laowantong
>for x86 compile, I did get 2ko files and installed
I checked the Makefile, for 2.6 kernel everything is compiled into one module. What's the name of the 2 ko you got?
Did you test if the card works on PC with this driver? I suspect the driver was only tested on x86, it may have problem with mips.