不知道怎么说,CB6的资源真是少之又少。比如说吧,
http://docs.cubieboard.org/tutorials/cb6/start CB6的安卓源码尽然不提供。
那也只能折腾 Debian x64了。。。
得到debian的源代码并不是很复杂,介绍一个最简单的途径...
sudo apt-get install linux-source
也可以在linus分支上获取...用 git比较方便
https://www.kernel.org/
编译内核与编译其他软件没有多少不同,只是编译内核的设置选项比较复杂多样。
2.6.x版本的内核多达13 500个设置选项。现在目前版本4.11.x就更多了、、
现在比较方便的是 make可以直接自动处理依赖关系..选项可以通过kconfig完成....
kconfig 的源码就是内核代码中 script/kconfig 目录下各个编译选项的选择有3种方式:
- =y :: 直接编译到内核中
- =m :: 以模块方式编译到内核中
- 不设置 :: 不编译
编译方法:
- make menuconfig :: 源码根目录下生成 .config (没有会自动生成), .config中就是各个内核编译选项的选择状况.
- make defconfig :: 根据当前系统的架构默认 .config 生成内核源码目录下的 .config (每个架构的配置文件: ex. arch/x86/configs/x86_64_defconfig)
- make oldconfig :: 将已有的 .config 放到源码根目录下后执行, 目的是为了复用之前的内核编译选项的配置.
- make xconfig :: 图形化配置, 需要qt3, 个人觉得没有必要, 有 make menuconfig 就足够了.
- make localmodconfig :: 生成以正在使用的内核模块为对象的 .config
方法选择不同编译速度也不同。。。那怎么查看.ko生成呢...
cd /lib/modules/3.2.60
find . -name '*.ko' | wc -l
如果编译CB6的image中的一段内核代码:
make -C ${CB_KSRC_DIR} O=${CB_KBUILD_DIR} ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- kernel_defconfig
make -C ${CB_KSRC_DIR} O=${CB_KBUILD_DIR} ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4 INSTALL_MOD_PATH=${CB_TARGET_DIR} uImage modules
上述 第一行 是编译内核源码. 第二行 是创建 uImage 格式的内核映像以及创建内核模块
最终在 INSTALL_MOD_PATH 生成的内核模块可以直接拷贝到 arm机器上使用.
生成内核包:
make deb-pkg
安装内核:
make modules_install (安装内核模块到 /lib/modules 下)
make install (安装内核二进制映像, 生成并安装boot初始化文件系统映像文件)
删除内核:
- 删除/lib/modules/目录下不需要的内核库文件
- 删除/usr/src/kernel/目录下不需要的内核源码
- 删除/boot目录下启动的核心档案禾内核映像
- 更改grub的配置,删除不需要的内核启动列表
具体其他怎么做,就等官方发文档把......
不知道怎么说,CB6的资源真是少之又少。比如说吧,
http://docs.cubieboard.org/tutorials/cb6/start CB6的安卓源码尽然不提供。
那也只能折腾 Debian x64了。。。
得到debian的源代码并不是很复杂,介绍一个最简单的途径...
sudo apt-get install linux-source
也可以在linus分支上获取...用 git比较方便
https://www.kernel.org/
编译内核与编译其他软件没有多少不同,只是编译内核的设置选项比较复杂多样。
2.6.x版本的内核多达13 500个设置选项。现在目前版本4.11.x就更多了、、
现在比较方便的是 make可以直接自动处理依赖关系..选项可以通过kconfig完成....
kconfig 的源码就是内核代码中 script/kconfig 目录下各个编译选项的选择有3种方式:
- =y :: 直接编译到内核中
- =m :: 以模块方式编译到内核中
- 不设置 :: 不编译
编译方法:
- make menuconfig :: 源码根目录下生成 .config (没有会自动生成), .config中就是各个内核编译选项的选择状况.
- make defconfig :: 根据当前系统的架构默认 .config 生成内核源码目录下的 .config (每个架构的配置文件: ex. arch/x86/configs/x86_64_defconfig)
- make oldconfig :: 将已有的 .config 放到源码根目录下后执行, 目的是为了复用之前的内核编译选项的配置.
- make xconfig :: 图形化配置, 需要qt3, 个人觉得没有必要, 有 make menuconfig 就足够了.
- make localmodconfig :: 生成以正在使用的内核模块为对象的 .config
方法选择不同编译速度也不同。。。那怎么查看.ko生成呢...
cd /lib/modules/3.2.60
find . -name '*.ko' | wc -l
如果编译CB6的image中的一段内核代码:
make -C ${CB_KSRC_DIR} O=${CB_KBUILD_DIR} ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- kernel_defconfig
make -C ${CB_KSRC_DIR} O=${CB_KBUILD_DIR} ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4 INSTALL_MOD_PATH=${CB_TARGET_DIR} uImage modules
上述 第一行 是编译内核源码. 第二行 是创建 uImage 格式的内核映像以及创建内核模块
最终在 INSTALL_MOD_PATH 生成的内核模块可以直接拷贝到 arm机器上使用.
生成内核包:
make deb-pkg
安装内核:
make modules_install (安装内核模块到 /lib/modules 下)
make install (安装内核二进制映像, 生成并安装boot初始化文件系统映像文件)
删除内核:
- 删除/lib/modules/目录下不需要的内核库文件
- 删除/usr/src/kernel/目录下不需要的内核源码
- 删除/boot目录下启动的核心档案禾内核映像
- 更改grub的配置,删除不需要的内核启动列表
具体其他怎么做,就等官方发文档把......