我们需要Android设备上的ch341.ko模块。
这是一个可选模块,从2.4.x(可能是2.3.x)开始就包含在内核源代码中。

The source is located under (kernel)/drivers/usb/serial/ch341.c

    I endevoured to learn how to build modules, then found it was already in the source so no need for makefiles and the like, then endevoured to find how to crosscompile the linux source with the ch341 option to add it to the device.

安装交叉编译器
我收集到的第一件事是找到正确的交叉编译器,因此从adb shell yeild运行cat /proc/versionon:
根@android:/cat/proc/version
Linux版本3.0.8+(android2@linux)(GCC版本4.5.1(sourcery g++lite 2010.09-50))47抢占2012年7月9日星期一16:32:14 cst
下载并在我的Fedora 16 Box上的版本50上安装Sourcery G++。然后将的目录添加到路径变量:
export path=$path:(安装的codesourcery的路径)/codesourcery/sourcery++lite/bin
或者手动添加到~/.bash_配置文件中:
sudo gedit ~/.bash\u简介
然后更新路径变量:
源~/.bash_u配置文件
下载内核源代码-
要想找到正确的源代码是很困难的,但是知道这个设备很可能是Allwinner的A10,我找到了下面的Git存储库和方便的教程:
https://github.com/amery/linux-allwinner
http://rhombus-tech.net/allwinner_a10/kernel_compile/
安装git后,克隆我尝试针对两个分支编译的树:
“allwinner-v3.0-android-v2”(主打)
“lichee-3.0.8-sun4i”(它更符合我的设备)
我使用以下命令交叉编译:
使arch=arm sun4i_defconfig
使arch=arm menuconfig
使arch=arm cross_compile=arm none linux gnueabi--j16映像模块
使arch=arm cross_compile=arm none linux gnueabi-install_mod_path=output modules_install
每次编译之后,我都将ch341.ko文件推送到设备:
adb push output/lib/modules/3.0.8+/kernel/drivers/usb/serial/ch341.ko/mnt/sdcard/lkmz/ch341.ko
然后尝试insmod“
亚行外壳
根@android:/insmod/mnt/sdcard/lkmz/ch341.ko
insmod:init_module'/mnt/sdcard/lkmz/ch341.ko'失败(exec格式错误)
DMESG返回:
启动信息
CH341:不同意符号模块布局的版本
尝试使用-f(force)选项:
./system/xbin/busybox insmod-f/mnt/sdcard/lkmz/ch341.ko系统
insmod:无法插入“/mnt/sdcard/lkmz/ch341.ko”:模块格式无效
因此,我用来编译源代码的版本或编译选项似乎有问题。
有人对如何编译ch341.ko模块有什么建议吗?

最佳答案

关闭config_modversions并检查它是否工作。如果没有,“dmesg”并检查新的错误。
查看this页,可能会有所帮助。

10-04 19:36