极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 8164|回复: 2

[转]pcDuino内核开发指南

[复制链接]
发表于 2013-6-21 09:54:37 | 显示全部楼层 |阅读模式
最近在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左右,而且还不断增加中。这里需要找个安静的网络,可以长时间下载。下载后源码如图所示:
三,编译内核源码
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盘执行以下命令就可以直接拷贝过去了
    scp uImage root@192.168.3.101:/home/ubuntu/
    当然你执行这个命令你需要在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
    这个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模块就可以用了。
    回复

    使用道具 举报

    发表于 2014-5-18 02:22:22 | 显示全部楼层
    git clone https://github.com/pcduino/kernel.git
    为什么我下载来只有几M?
    回复 支持 反对

    使用道具 举报

    发表于 2014-6-19 10:02:43 | 显示全部楼层
    kradnangel 发表于 2014-5-18 02:22
    git clone https://github.com/pcduino/kernel.git
    为什么我下载来只有几M?

    加上  --recursive 参数
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    Archiver|联系我们|极客工坊 ( 浙ICP备09023225号 )

    GMT+8, 2020-7-9 20:15 , Processed in 0.048544 second(s), 25 queries .

    Powered by Discuz! X3.4 Licensed

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表