我们在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运行cat /proc/version
yeilded:
root @ 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 2012
在我的Fedora 16盒子上下载并在50版本上安装Sourcery G ++。然后将目录添加到PATH变量:
EXPORT PATH = $ PATH :(安装CodeSourcery的路径)/ CodeSourcery / Sourcery_G ++ _ Lite / bin
或手动将其添加到〜/ .bash_profile:
sudo gedit~ / .bash_profile
然后更新PATH变量:
source~ / .bash_profile
下载内核源代码 -
尝试找到正确的来源可能会很困难,但是知道该设备最有可能来自Allwinner的A10,我找到了以下git存储库以及方便的教程:
https://github.com/amery/linux-allwinner
http://rhombus-tech.net/allwinner_a10/kernel_compile/
安装git后,克隆树我尝试编译2个分支:
“allwinner-v3.0-android-v2”(主要的)
“lichee-3.0.8-sun4i”(更符合我的设备)
我使用以下命令进行交叉编译:
制作ARCH = arm sun4i_defconfig make ARCH = arm menuconfig make ARCH = arm CROSS_COMPILE = arm-none-linux-gnueabi- -j16 uImage modules make 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“
adb shell root @ android:/ #insmod /mnt/sdcard/LKMz/ch341.ko insmod:init_module'/ mnt/sdcard/LKMz/ch341.ko'失败(执行格式错误)
dmesg返回:
的dmesg ch341:不同意符号module_layout
的版本尝试使用-f(强制)选项:
./ system / xbin / busybox insmod -f /mnt/sdcard/LKMz/ch341.ko insmod:无法插入'/mnt/sdcard/LKMz/ch341.ko':模块格式无效
所以看起来我用来编译源代码的版本或编译选项存在问题。
有人对如何编译ch341.ko模块有任何建议吗?