IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android系统10 RK3399 init进程启动(十一) 内核编译 -> 正文阅读

[移动开发]Android系统10 RK3399 init进程启动(十一) 内核编译

?配套系列教学视频链接:

? ? ??安卓系列教程之ROM系统开发-百问100ask

说明

系统:Android10.0

设备: FireFly RK3399 (ROC-RK3399-PC-PLUS)

前言

? ? ? ? ?本章重点介绍在Android 源码包中,内核的的单独编译。


一, 内核目标清除

内核如果编译过, 需要重新重头编译,或者打包给别人, 可以对内核进行清除

cd rk3399_Android10.0/kernel/

make ??distclean? 或者 make clean

distclean清除更彻底

二, 单独第一次编译内核

对于第一个编译内核, 需要进行内核配置, rk3399会可以做如下操作

cd rk3399_Android10.0/

source FFTools/build.sh

cd kernel/

make ARCH=arm64 firefly_defconfig android-10.config ?rk3399.config

make ARCH=arm64 BOOT_IMG=../rockdev/Image-rk3399_roc_pc_plus/boot.img rk3399-roc-pc-plus.img -j6

解释:

执行make ARCH=arm64 firefly_defconfig android-10.config ?rk3399.config会显示如下:

arch/arm64/configs/firefly_defconfig

Using .config as base

Merging ./kernel/configs/android-10.config

Merging ./kernel/configs/rk3399.config

merged configuration written to .config (needs make)

configuration written to .config

?说明会将多个congfig文件会进行合并。

执行make ARCH=arm64 BOOT_IMG=../rockdev/Image-rk3399_roc_pc_plus/boot.img rk3399-roc-pc-plus.img -j6 的意思是

会编译rk3399-roc-pc-plus.dts, 并且会将最终的目标文件更新生成到../rockdev/Image-rk3399_roc_pc_plus/boot.img

三, 修改内核源码再编译

如果已经做过第一次内核配置和编译,后面需要在此基础上进行修改和编译, 可以通过如下操作:

cd rk3399_Android10.0/

source FFTools/build.sh

cd kernel/

make ARCH=arm64 menuconfig?

或者修改源码,dts等, 如修改支持sd/tf启动:

vim  arch/arm64/boot/dts/rockchip/rk3399-roc-pc-plus.dts  +88 打开注释
&sdmmc{
    supports-emmc; //for sd boot
};
vim arch/arm64/boot/dts/rockchip/rk3399-roc-pc-plus.dtsi +266 添加
&vcc_sd{
    regulator-always-on;
    regulator-boot-on;
    regulator-min-microvolt = <3300000>;
    regulator-max-microvolt = <3300000>;
};

重新编译内核:

make ARCH=arm64 BOOT_IMG=../rockdev/Image-rk3399_roc_pc_plus/boot.img rk3399-roc-pc-plus.img -j24 ?

?最后编译生成日志为:

CC ?????drivers/gpu/arm/bifrost/bifrost_kbase.mod.o

??CC ?????drivers/gpu/arm/midgard/midgard_kbase.mod.o

??CC ?????drivers/media/usb/gspca/gspca_main.mod.o

??CC ?????drivers/mtd/devices/m25p80.mod.o

??CC ?????drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/bcmdhd.mod.o

??CC ?????drivers/net/wireless/rockchip_wlan/rtl8723ds/8723ds.mod.o

??CC ?????drivers/net/wireless/rockchip_wlan/rtl8723cs/8723cs.mod.o

??CC ?????drivers/net/wireless/rockchip_wlan/rtl8723du/8723du.mod.o

??CC ?????drivers/net/wireless/rockchip_wlan/rtl8822bs/8822bs.mod.o

??LD [M] ?drivers/gpu/arm/bifrost/bifrost_kbase.ko

??LD [M] ?drivers/net/wireless/rockchip_wlan/rtl8723du/8723du.ko

??LD [M] ?drivers/media/usb/gspca/gspca_main.ko

??LD [M] ?drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/bcmdhd.ko

??LD [M] ?drivers/net/wireless/rockchip_wlan/rtl8822bs/8822bs.ko

??LD [M] ?drivers/gpu/arm/midgard/midgard_kbase.ko

??LD [M] ?drivers/mtd/devices/m25p80.ko

??LD [M] ?drivers/net/wireless/rockchip_wlan/rtl8723cs/8723cs.ko

??LD [M] ?drivers/net/wireless/rockchip_wlan/rtl8723ds/8723ds.ko

??Image: ?resource.img (with rk3399-roc-pc-plus.dtb logo.bmp logo_kernel.bmp) is ready

??Image: ?boot.img (../rockdev/Image-rk3399_roc_pc_plus/boot.img + Image + resource.img) is ready

??Image: ?zboot.img (../rockdev/Image-rk3399_roc_pc_plus/boot.img + Image.lz4 + resource.img) is ready

四, 生成镜像介绍

在当前目录下会出现boot.img ?resource.img, 以上红色部分是在kernel/scripts/mkimg中打印出来的

file boot.img

boot.img: Android bootimg, kernel (0x10008000), second stage (0x10f00000), page size: 2048

?将boo.img解压出来, unpack_bootimg --boot_img boot.img --out boot-out,.得到如下内容:

其实boot.img的生成是由如下命令完成的:

./scripts/mkbootimg --kernel ./arch/arm64/boot/Image --second resource.img -o boot.img

最后通过验证,其实boot.img中的second就是resource.img。

?解压resource.img:

kernel/mytest$ ../scripts/resource_tool --unpack --image=resource.img?

?在当前目录下出现out目录:

?所以rk3399下boot.img内部结构如下:

+—————–+

| boot header | 1 page

+—————–+

| kernel | n pages

+—————–+

| ramdisk | m pages

+—————–+

| second stage | o pages?<====() logo.bmp ?logo_kernel.bmp rk-kernel.dtb

+—————–+

五, 内核烧录

六,总结

通过编译内核, 大体上知道内核源码最终生成的是boot.img, 可以打包生成到统一镜像中去, 也可以单独编译和调试。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-09 11:48:03  更:2021-12-09 11:49:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:51:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码