最近在pcDuino上做AP的功能的,但是内核不支持NAT,需要改内核,添加wifi驱动,这里把内核开发的方法分享给大家,方便大家以后学习调试其他的驱动。 一,搭建交叉开发环境 按照传统的开发方法,我们需要下载交叉编译器,设置环境变量,有些时候交叉编译器还不能用,等等一些问题。在pcduino上搭建很简单: 1,在电脑安装ubuntu系统,虚拟机或者硬盘安装都行,具体的安装过程我就不在这里赘述了; 2,sudo apt-get update #更新一下软件源; 3,sudo apt-get upgrade # 更新一下系统; 4,sudo apt-get install g++-arm-linux-guneabihf #安装交叉编译器,安装的过程会设置好系统的交叉编译环境 二,下载pcduino内核源码 1,sudo apt-get install git-core #下载安装git工具 这个源码比较大加上git管理有2G左右,而且还不断增加中。这里需要找个安静的网络,可以长时间下载。下载后源码如图所示: 三,编译内核源码 linux-sunxi目录就是内核源码目录,我们到这个目录下: make mrproper #深度清除以前的配置 回到kernel目录下 make 第一次编译可能会出现一下问题: 1,提示有些.c文件找不到,其实这些文件是有的,按照提示,你到出现错误的目录里面去找,其实那个.c文件被加了其他的后缀,把后缀去掉可以了。 2,提示找不到工具mkimage ,这个工具是在编译u-boot的时候生成的所以你需要到 /home/pillar/WORK/kernel/build/pcduino-u-boot/tools 目录下,把mkimag拷贝到/usr/bin/目录下 除了以上问题应该没有其他的问题了。 四,配置Linux内核 传统的方法是到Linux 内核源码下面执行make menuconfig 由于pcDuino把整个工程都包装的很好,这里就不能到内核源码目录下执行了 由于Linux内核源码的图像化界面是基于ncurses库的,所以这里需要安装那个库 ‘sudo apt-get install libncurses5-dev 安装完毕后,切换到/home/pillar/WORK/kernel/build/sun4i_defconfig-linux/下 make CROSS_COMPILE=arm-linux-gnueabi- ARCH=arm menuconfig
这样就看到了久违的Linux内核配置界面了。 配置完成后保存退出 执行 ls -a 命令就可以看到当前目录下隐藏的,config 文件 从底层的Makefile分析可以知道,编译的时候并不是读取这个目录下的.config cp .config /home/pillar/WORK/kernel/patch/linux-sunxi/arch/arm/configs/sun4i_defconfig 这样就会编译我们配置的内核。 五,在内核中添加驱动 这里我以添加雷凌的rt5370 USB wifi驱动为例介绍如何在内核中添加驱动。具体的内核驱动开发学习过程,请关注我后期的博客。 拷贝已经开发好的rt5370驱动到 /home/pillar/WORK/kernel/linux-sunxi/drivers/net/wireless 修改该目录下的Kconfig 文件,在文件的最后添加一下内容 source "drivers/net/wireless/rtxx7x/Kconfig" 修改该目录下的Makefile文件,在文件的最后加上一下内容 obj-$(CONFIG_RTXX7X_SW) += rtxx7x/ 最后在刚才介绍的目录下安装刚介绍的命令配置内核,在内核的 Device Drivers ---> Network device support ---> Wireless LAN ---><M> Ralink 3070/3370/5370/5372 USB WiFi for SW
选择M表示是动态加载,编译完成之后会生成ko文件,你直接把它拷贝到文件系统,然后执行 insmod *.ko 就可以了,或者你选择*,这样就会编译进内核。 六,烧写刚刚修改过的内核 pcDuino提供了一个很简单的方式修改内核,告别了传统的TF卡,USB等等设备 编译生成的内核文件在 /home/pillar/WORK/kernel/build/sun4i_defconfig-linux/arch/arm/boot 目录下,我只需要用U盘拷贝到pcDuino上,或者你没有U盘执行以下命令就可以直接拷贝过去了 当然你执行这个命令你需要在pcduino上执行一下命令安装SSH sudo apt-get install openssh-server openssh-client 回到pcDuino,我们可以在/home/ubuntu/看到刚才的uImage,执行以下命令就可以直接将刚才修改的内核烧写到pcDuino上: sudo mount /dev/nanda /boot sudo cp uImage /boot -f sudo cp evb.bin /boot -f sudo reboot 这样内核就烧写完成了。 pcDuino很多驱动都是动态加载的,因此内核里面是没有驱动那些驱动的,你需要把刚才编译生成的驱动拷贝到当前的文件系统中来。驱动生成的目录如下: /home/pillar/WORK/kernel/output 这个目录里面有a10_hwpack_20130417.tar.xz包,具体包的名字会根据当前日期来定。 把这个包拷贝到pcDuino上解压,解压后rootfs/lib/modules里面的3.4.29+里面都是ko文件,你只需替换到当前就可以了 首先到pcDuino的/lib/modules目录下删掉原来的驱动,新驱动和原来的是不兼容的,然后把刚才的3.4.29+拷贝到过来。 这里很多东西需要都需要手动加载,比如你想用USB wifi 你需要到net/wireless下执行 insmod rt5370sta.ko 这样驱动就加进去了,你的wifi模块就可以用了。 |