更改

跳转至: 导航搜索

Orange Pi CM4

添加987字节, 2023年9月13日 (三) 16:43
编译Linux内核
<p>[[File:media/image399.png|576x87px]]</p></li>
<li><p>如果第'''4'''步选择了需要显示内核配置菜单(第二个选项),则会弹出通过'''make menuconfig'''打开的内核配置的界面,此时可以直接修改内核的配置,修改完后再保存退出即可,退出后会开始编译内核源码</p>
<p>[[File:media/image400.png|575x400px]]</p></li></ol>
<!-- -->
<ol style="list-style-type: lower-alpha;">
<li><p>如果不需要修改内核的配置选项,在运行build.sh脚本时,传入'''KERNEL_CONFIGURE=no'''就可临时屏蔽弹出内核的配置界面了</p>
{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''sudo ./build.sh KERNEL_CONFIGURE=no'''</p>|}</li>
<li><p>也可以设置'''orangepi-build/userpatches/config-default.conf'''配置文件中的'''KERNEL_CONFIGURE=no''',这样可以永久禁用这个功能</p></li>
<li><p>编译内核的时候如果提示下面的错误,这是由于Ubuntu &gt; PC的终端界面太小,导致'''make &gt; menuconfig'''的界面无法显示,请把Ubuntu &gt; PC的终端调到最大,然后重新运行build.sh脚本</p>
<p>[[File:media/image401.png|574x234px]]</p></li></ol>
</ol>
<!-- -->
<ol start="6" style="list-style-type: decimal;">
<ol style="list-style-type: lower-alpha;">
<li><p>Linux内核源码的版本</p>
{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Compiling current kernel [ '''5.10.160''' ]</p>|}</li>
<li><p>使用的交叉编译工具链的版本</p>
{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Compiler version [ '''aarch64-none-linux-gnu-gcc 11.2.1''' ]</p>|}</li>
<li><p>内核默认使用的配置文件以及它存放的路径</p>
{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Using kernel config file [ '''config/kernel/linux-rockchip-rk356x-legacy.config''' ]</p>|}</li>
<li><p>编译生成的内核相关的deb包的路径</p>
{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Target directory [ '''orangepi-build/output/debs/''' ]</p>|}</li>
<li><p>编译生成的内核镜像deb包的包名</p>
{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] File name [ '''linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb''' ]</p>|}</li>
<li><p>编译使用的时间</p>
{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Runtime [ '''5 min''' ]</p>|}</li>
<li><p>最后会显示重复编译上一次选择的内核的编译命令,使用下面的命令无需通过图形界面选择,可以直接开始编译内核源码</p>
{| class="wikitable" style="width:800px;" |-| <p>[ o.k. ] Repeat Build Options [ '''sudo ./build.sh BOARD=orangepicm4 BRANCH=legacy BUILD_OPT=kernel KERNEL_CONFIGURE=no''' ]</p>|}</li></ol>
</li>
<li><p>查看编译生成的内核相关的deb包</p>
<li><p>'''linux-headers-legacy-rockchip-rk356x_1.0.0_arm64.deb'''包含内核头文件</p></li>
<li><p>'''linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb'''包含内核镜像和内核模块</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>test@test:~/orangepi-build$ '''ls output/debs/linux-*'''</p>
<p>output/debs/linux-dtb-legacy-rockchip-rk356x_1.0.0_arm64.deb </p><p>output/debs/linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb</p><p>output/debs/linux-headers-legacy-rockchip-rk356x_1.0.0_arm64.deb</p>|}</li></ol>
</li>
<li><p>生成的linux-image的deb包包含的文件如下所示</p>
<ol style="list-style-type: lower-alpha;">
<li><p>使用下面的命令可以解压deb包</p>
{| class="wikitable" style="width:800px;" |-| <p>test@test:~/orangepi-build$ '''cd output/debs'''</p></li></ol></li></ol>
test@test:~/orangepi_build/output/debs$ '''mkdir test'''
'''boot etc lib''' linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb '''usr'''
|}</li></ol>
<ol start="2" style="list-style-type: lower-alpha;">
<li><p>解压后的文件如下所示</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>test@test:~/orangepi-build/output/debs/test$ '''tree -L 2'''</p>
<p>.</p>
<p>├── linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb</p>
<p>└── usr</p>
:<p>├── lib</p>:<p>└── share</p>|}</li></ol></li></ol>
<!-- -->
<ol start="9" style="list-style-type: decimal;">
<li><p>orangepi-bulid编译系统编译Linux内核源码时首先会将Linux内核源码和github服务器的Linux内核源码进行同步,所以如果想修改Linux内核的源码,首先需要关闭源码的更新功能('''需要完整编译过一次Linux内核源码后才能关闭这个功能,否则会提示找不到Linux内核的源码,如果是从百度云盘下载的源码压缩包,则没有这个问题,因为Linux的源码都已缓存好了'''),否则所作的修改都会被还原,方法如下:</p>
<p>设置'''userpatches/config-default.conf'''中的IGNORE_UPDATES变量为”yes”</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>test@test:~/orangepi-build$ '''vim userpatches/config-default.conf'''</p>
<p>IGNORE_UPDATES=&quot;'''<span style="color:#FF0000">yes</span>'''&quot;</p>|}</li>
<li><p>如果对内核做了修改,可以使用下面的方法来更新开发板Linux系统的内核和内核模块</p>
<ol style="list-style-type: lower-alpha;">
<li><p>将编译好的Linux内核的deb包上传到开发板的Linux系统中</p>
{| class="wikitable" style="width:800px;"
|-
|
<p>test@test:~/orangepi-build$ '''cd output/debs'''</p>
<p>test@test:~/orangepi-build/output/debs$ '''scp \'''</p>
<p>'''linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb root@192.168.1.xxx:/root'''</p>|}</li>
<li><p>然后登录到开发板,卸载已安装的Linux内核的deb包</p>
{| class="wikitable" style="width:800px;" |-| <p>root@orangepi:~# '''apt purge -y linux-image-legacy-rockchip-rk356x'''</p>|}</li>
<li><p>再安装刚才上传的新的Linux内核的deb包</p>
{| class="wikitable" style="width:800px;" |-| <p>root@orangepi:~# '''dpkg -i linux-image-legacy-rockchip-rk356x_1.0.0_arm64.deb'''</p>|}</li>
<li><p>然后重启开发板,再查看内核相关的修改是否已生效</p>
{| class="wikitable" style="width:800px;" |-| <p>root@orangepi:~# '''reboot'''</p>|}</li></ol>
</li>
<li><p>其它有用的信息</p>
<ol style="list-style-type: lower-alpha;">
<li><p>内核配置文件存放位置如下所示,请不要到内核源码中去找开发板所使用的内核配置文件</p></li>
<li><p>{| class="wikitable" style="width:800px;" |-| [https://github.com/orangepi-xunlong/orangepi-build/blob/next/external/config/kernel/linux-rockchip-rk356x-legacy.config '''orangepi-build/external/config/kernel/linux-rockchip-rk356x-legacy.config''']|}<li><p>开发板使用的dts文件所在的位置为</p></li>{| class="wikitable" style="width:800px;" |-| [https://github.com/orangepi-xunlong/linux-orangepi/blob/orange-pi-5.10-rk35xx/arch/arm64/boot/dts/rockchip/rk3566-orangepi-cm4.dts '''orangepi-build/kernel/orange-pi-5.10-rk35xx/arch/arm64/boot/dts/rockchip/rk3566-orangepi-cm4.dts''']|}</ol>
</li></ol>
 
[https://github.com/orangepi-xunlong/linux-orangepi/blob/orange-pi-5.10-rk35xx/arch/arm64/boot/dts/rockchip/rk3566-orangepi-cm4.dts '''orangepi-build/kernel/orange-pi-5.10-rk35xx/arch/arm64/boot/dts/rockchip/rk3566-orangepi-cm4.dts''']
== 编译rootfs ==
8,460
个编辑

导航菜单