03 OrangePi 内核编译

本文介绍如何为橙派板配置交叉编译器并编译Linux内核。包括安装与配置交叉编译器、使用制造商提供的默认配置、定制内核配置、编译过程及常见错误解决方法。

配置交叉编译器:
    解包gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux.tar.bz2
    解包后,得到的目录名比较长,改下目录名为“arm-gcc"

    vim  /etc/bashrc 增加语句

    export  PATH=/disk3/myown/arm-gcc/bin:$PATH

    保存退出后, 注消系统后环境变量生效

    重登系统后,在终端输入arm按两下tab键:
    会出现好多个:  arm-linux-gnueabihf-*  


内核编译:
    在orangepi_sdk目录下:
    进入source/linux-3.4.112内核源码目录.

    注意: uboot, linux内核都是可以支持多种CPU架构, 一个CPU架构下又有多种SOC, 一个SOC又可以做成多种方案.所以我们编译前都需要指定编译哪种架构,哪种SOC, 哪种方案

    linux内核里的配置项非常多,厂家一般都会提供一些默认的配置。配置文件在CPU架构目录下的configs目录.
    我们可用的配置在arm/configs:
      sun8iw7p1smp_android_defconfig         sun8iw7p1smp_linux_defconfig
      sun8iw7p1smp_android_karaok_defconfig  sun8iw7p1smp_min_defconfig
      sun8iw7p1smp_android_secure_defconfig  sun8iw7p1smp_secure_defconfig
          sun8iw7p1smp_defconfig


    1). 使用厂商提供的默认配置:
        可以把xxx_defconfig 复制成源码根目录下的.config
        也可以:  make xxx_defconfig

        make sun8iw7p1smp_android_defconfig  ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-    

        //注意,以后只要在linux里打"make"都需指定ARCH, CROSS_COMPILE

    2). 配置内核:
        make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

        出现界面后(按空格键选上或取消选中项):
         [*] Enable loadable module support  --->
            [*]     Forced module unloading
            [ ]   Module versioning support
            [ ]   Source checksum for all modules

         Device Drivers  --->   
            <*> Multimedia support  --->
                [*]   Video capture adapters  --->
                    [*]   V4L USB devices  --->
                         <*>   USB Video Class (UVC)     
         General setup  --->
            [ ] Initial RAM filesystem and RAM disk (initramfs/initrd) support

         CPU Power Management  --->
            CPU Frequency scaling  --->
                [ ] CPU Frequency scaling 

    3).  编译内核 
        make -j4 uImage  ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
         编译时出现错误:
        drivers/base/firmware_class.c: In function ‘firmware_data_read’:
        drivers/base/firmware_class.c:631:9: error: implicit declaration of function ‘kobj_to_dev’ [-Werror=implicit-function-declaration]

         原因是那源文件里没有包含 "kobj_to_dev"的头文件.
         在drivers/base/firmware_class.c里写上包含头文件<linux/genhd.h>

         修改好后,接着编译即可.
         编译完成后, 在arch/arm/boot/uImage就是编译出来的内核镜像

    4). 把板上SD卡接上pc, 把编译出来的内核镜像放到卡的第一个分区(即fat分区),也可以放到第二个分区(需注意命令)


    5). 把SD卡重放到板上后,即可读出来到内存来启动
        fatload mmc 0:1 0x43000000 /script.bin   //内核用的配置文件

        fatload mmc 0:1 0x42000000 /uimage       //内核镜像

        bootm 0x42000000                         //启动内核 
        如果出现以下错误:
        Error: unrecognized/unsupported machine ID (r1 = 0x00000000).
        Available machine support:
        ID (hex)        NAME
        00001029        sun8i
        Please check your kernel config and/or bootloader.
            修正方法: 设置uboot的环境变量"setenv machid 0x1029"保存再重新启动内核即可
        //启动后,只要有一堆的东西输出即是正常的了

    6). 如果想要开发板开机后自动引导内核, 可以修改bootcmd环境变量来完成
        setenv bootcmd "fatload mmc 0:1 0x43000000 /script.bin; fatload mmc 0:1 0x42000000 /uimage; bootm 0x42000000"
        saveenv //保存环境变量

### 编译香橙派 OrangePi 5Linux 内核 #### 准备工作环境 为了成功编译适用于香橙派 OrangePi 5Linux 内核,需先设置好开发环境。这通常涉及安装必要的工具包和依赖项: 对于基于 Debian/Ubuntu 的发行版,可以执行如下命令来安装所需软件包: ```bash sudo apt-get update && sudo apt-get install -y \ build-essential \ libncurses-dev \ bison \ flex \ libssl-dev \ libelf-dev \ bc \ device-tree-compiler \ wget \ git ``` #### 获取内核源码 下载官方支持的最新稳定版本内核源码或是特定于 OrangePi 平台优化过的分支。可以从 GitHub 上获取由社区维护的相关仓库。 假设使用 git 方式克隆仓库,则操作如下所示: ```bash git clone https://github.com/orangepi-xunlong/u-boot-orangepi.git cd u-boot-orangepi/ git checkout sunxi-v2017.09 ``` 注意这里仅作为示例路径展示,并不一定是最新的推荐做法;实际应参照最新的文档指引[^3]。 #### 配置内核选项 进入解压后的目录并加载默认配置文件,之后可根据需求调整参数设定。对于 OrangePi 设备而言,一般会有一个预定义好的 .config 文件可供选用。 ```bash make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- orange-pi-zero_defconfig ``` 上述命令中的 `orange-pi-zero_defconfig` 是一个例子,具体到 OrangePi 5 应该有对应的专用配置名称,请查阅相关资料确认确切的名字[^1]。 #### 开始编译过程 完成以上准备工作后就可以正式开始编译流程了。考虑到不同硬件性能差异较大,在多线程模式下加快速度可能是明智的选择(即利用 `-jN` 参数指定并发作业数量 N)。例如: ```bash make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j$(nproc) ``` #### 处理常见错误 如果遇到类似于浮点运算导致的编译失败情况,一种临时解决方案是禁用或替换掉有问题的部分代码逻辑,但这并不是理想的长期策略。更建议排查是否存在兼容性的 CPU 特性问题或者是编译器本身的 bug 。另外也可以考虑更新至更高版本的 GCC 或者更换其他稳定的交叉编译链[^2]。 #### 安装与测试新内核编译完成后,按照标准方法制作启动镜像并将生成的结果部署到目标板上进行验证即可。确保正确设置了引导加载程序 U-Boot 来指向新的内核映像位置以及配套使用的设备树 blob (DTB) 文件等资源。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值