如何为android构建ch341.ko usb-serial驱动程序?

时间:2012-09-03 08:34:23

标签: android linux kernel

我们在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.
  1. 安装交叉编译器 我收集的第一件事是找到正确的交叉编译器,因此从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

  2. 下载内核源代码 -

    尝试找到正确的来源可能会很困难,但是知道该设备最有可能来自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模块有任何建议吗?

1 个答案:

答案 0 :(得分:1)

关闭CONFIG_MODVERSIONS并检查它是否有效。如果没有,请“dmesg”并检查新错误。

检查this页面,这可能有帮助。