gpio 发表于 2013-12-20 12:24:34

[经验] 升级 linux 内核到官方 git 版本 (3.4.67)

本帖最后由 gpio 于 2013-12-20 13:01 编辑

板子到手后在nand中刷了一个官方 lubuntu 1.06 版本(下载地址), 用了一阵觉得不错, 很是喜爱, 之后由于要做一些操纵针脚跟其他模块打交道的程序, 所以准备自己开发 Linux驱动来进行交互.

搞过 Linux 驱动的应该知道驱动的编译是需要指定内核源码路径的, 但是由于官方并没有把 lubuntu 1.06 版本的源代码放出来 (只有 1.05 的), 所以决定使用官方 git 最新源码, 自己编译个 Linux 内核.

0. 首先要确保板子 nand 内刷了 lubuntu 1.06 (下载地址), 因为此贴只谈如何升级现有内核, 而不是从 0 开始制作镜像.

1. 在PC上安装好交叉编译工具链:sudo apt-get install gcc-arm-linux-gnueabi2. 使用 git 下载官方源码:
    注意必须切换到 sunxi-3.4 分支!git clone -b sunxi-3.4 https://github.com/linux-sunxi/linux-sunxi.git3. 准备编译内核所需的配置文件, 注意这一步非常重要, 如果配置不正确, 板子的 nand 肯定驱动不了, 系统起不来! 这一步是楼主遇到的最大的坑, 在此要感谢 @寂寞八進制 的提醒, 才明白是哪里出了问题.
    如果开机时, 系统死在Waiting for root device /dev/nanda说明配置不正确, 或是配置中没有勾选 SUNXI nandflash driver, 请仔细检查这一步!

    这是我从官方源码包内抠出来的 cubieboard2 的配置
    其他型号的配置估计也能从官方源码包里弄到 (可以从这里面找)

解压出的配置文件复制到linux-sunxi/arch/arm/configs/配置文件的名字改成kernel_defconfig4. 开始编译: (注意 -j8 表示使用 8 个 CPU 编译, 改成你自己的 CPU 数目或者去掉都行)cd linux-sunxi
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- kernel_defconfig
make -j8 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage modules
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=output modules_install5. 在板子上挂载 nanda 分区到文件系统mount /dev/nanda 你想挂载的路径6. 把 PC 上的 uImage 替换板子上的 uImage;
    把 PC 上的驱动, 覆盖到板子上根目录

PC 上 uImage 位置:linux-sunxi/arch/arm/bootPC 上驱动位置:linux-sunxi/output7. 自此, 内核就已经升级成功了, 可以把板子上 /lib/modules/3.4.61+ 文件夹删除, 因为它是上一版内核的驱动包, 升级内核之后就没有用了

8. 检查板子上的 /lib/modules 目录下有没有 3.4.67 目录, 如果操作正确是肯定有的

9. 重启系统reboot10. 启动之后查看内核版本, 可以看到 3.4.67 就是成功了uname -a

hukof10th 发表于 2013-12-26 17:06:59

你好,请问你用的什么板子?

sgweilong 发表于 2014-6-6 09:17:13

写的很好,我也基本成功了。
之前花了好多时间,要不是选错了config文件,就是编译出错。
必须用下面的方式获取源代码,copy或者其他方式都不行!
git clone -b sunxi-3.4 https://github.com/linux-sunxi/linux-sunxi.git
页: [1]
查看完整版本: [经验] 升级 linux 内核到官方 git 版本 (3.4.67)