原来如此 发表于 2013-6-21 09:54:37

[转]pcDuino内核开发指南

最近在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内核源码构建pcDuino系统所有的源码都在https://github.com/pcduino/kernel里面,我们只需要安装git下载下来就可以了。1,sudo apt-get install git-core #下载安装git工具2,git clone https://github.com/pcduino/kernel.git #下载所有源码这个源码比较大加上git管理有2G左右,而且还不断增加中。这里需要找个安静的网络,可以长时间下载。下载后源码如图所示:http://www.linksprite.com/cnblog/wp-content/uploads/2013/04/15-300x42.png三,编译内核源码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    menuconfighttp://www.linksprite.com/cnblog/wp-content/uploads/2013/04/24-300x222.png
这样就看到了久违的Linux内核配置界面了。配置完成后保存退出执行 ls -a 命令就可以看到当前目录下隐藏的,config 文件从底层的Makefile分析可以知道,编译的时候并不是读取这个目录下的.configcp .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 SWhttp://www.linksprite.com/cnblog/wp-content/uploads/2013/04/34-300x218.png
选择M表示是动态加载,编译完成之后会生成ko文件,你直接把它拷贝到文件系统,然后执行insmod *.ko就可以了,或者你选择*,这样就会编译进内核。六,烧写刚刚修改过的内核pcDuino提供了一个很简单的方式修改内核,告别了传统的TF卡,USB等等设备编译生成的内核文件在/home/pillar/WORK/kernel/build/sun4i_defconfig-linux/arch/arm/boot目录下,我只需要用U盘拷贝到pcDuino上,或者你没有U盘执行以下命令就可以直接拷贝过去了scp uImage [email protected]:/home/ubuntu/当然你执行这个命令你需要在pcduino上执行一下命令安装SSHsudo apt-get install openssh-server openssh-client回到pcDuino,我们可以在/home/ubuntu/看到刚才的uImage,执行以下命令就可以直接将刚才修改的内核烧写到pcDuino上:sudo mount/dev/nanda   /bootsudo cp uImage   /boot   -fsudo cp evb.bin    /boot   -fsudo reboot这个evb.bin你需要到pcDuino的官网www.pcduino.com上面去下载。这样内核就烧写完成了。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模块就可以用了。

kradnangel 发表于 2014-5-18 02:22:22

git clone https://github.com/pcduino/kernel.git
为什么我下载来只有几M?

logbird 发表于 2014-6-19 10:02:43

kradnangel 发表于 2014-5-18 02:22 static/image/common/back.gif
git clone https://github.com/pcduino/kernel.git
为什么我下载来只有几M?

加上--recursive 参数
页: [1]
查看完整版本: [转]pcDuino内核开发指南