文章目录

  • 一、文件系统
    • 1.1 dts配置
    • 1.2 defconfig文件
  • 二、驱动分类
  • 三、Makefile和Konfig还有defconfig文件关系
  • 四、d

继上一篇uboot整理后,继续整理下kernel的框架

一、文件系统

IMX8QXP/vendor/nxp-opensource/kernel_imx$ ls
android                            build.config.arm                  build.config.gki_kasan.aarch64    build.config.x86_64  init             Makefile   sound
arch                               build.config.common               build.config.gki_kasan.x86_64     certs                ipc              mm         tools
block                              build.config.db845c               build.config.gki_kprobes          COPYING              Kbuild           net        usr
build.config.aarch64               build.config.gki                  build.config.gki_kprobes.aarch64  CREDITS              Kconfig          OWNERS     virt
build.config.allmodconfig          build.config.gki.aarch64          build.config.gki_kprobes.x86_64   crypto               kernel           README
build.config.allmodconfig.aarch64  build.config.gki.aarch64.fips140  build.config.gki.x86_64           Documentation        lib              README.md
build.config.allmodconfig.arm      build.config.gki-debug.aarch64    build.config.hikey960             drivers              LICENSES         samples
build.config.allmodconfig.x86_64   build.config.gki-debug.x86_64     build.config.imx                  fs                   MAINTAINERS      scripts
build.config.amlogic               build.config.gki_kasan            build.config.khwasan              include              MAINTAINERS.NXP  security

这些带有build的相关目录我没有过研究,有兴趣的可以自己去看看。

1.1 dts配置

我们比较关注的是arch/目录下的arm64的源码:
相关的dts目录:

arch/arm64/boot/dts/freescale/*dts

可以在对应的目录进行dts的添加编译或者删除编译

arch/arm64/boot/dts/freescale/Makefile

一般android指定对应的dts文件在device目录下进行指定:

目录: device/nxp/imx8q/mek_8q/BoardConfig.mk# For Android Auto with M4 EVS, fstab entries in dtb are in the form of non-dynamic partition by default
# For Android Auto without M4 EVS, fstab entries in dtb are in the form of dynamic partition by default
# For standard Android, the form of fstab entries in dtb depend on the value of "TARGET_USE_DYNAMIC_PARTITIONS"
ifeq ($(PRODUCT_IMX_CAR),true)ifeq ($(PRODUCT_IMX_CAR_M4),true)ifeq ($(IMX_NO_PRODUCT_PARTITION),true)TARGET_BOARD_DTS_CONFIG := imx8qm:imx8qm-mek-car-no-product.dtbTARGET_BOARD_DTS_CONFIG += imx8qxp:imx8qxp-mek-car-no-product.dtbelseifeq ($(IMX8QM_A72_BOOT),true)# imx8qm auto android, A72 bootTARGET_BOARD_DTS_CONFIG := imx8qm:imx8qm-mek-car-a72.dtb# imx8qm auto android with multi-display, A72 bootTARGET_BOARD_DTS_CONFIG += imx8qm-md:imx8qm-mek-car-md-a72.dtb# uncomment below line to build dtbo supporting multiple pcm device# TARGET_BOARD_DTS_CONFIG += imx8qm-esai:imx8qm-mek-car-esai.dtbelse# imx8qm auto androidTARGET_BOARD_DTS_CONFIG := imx8qm:imx8qm-mek-car.dtb# imx8qm auto android with multi-displayTARGET_BOARD_DTS_CONFIG += imx8qm-md:imx8qm-mek-car-md.dtbendif# imx8qm auto android virtualizationTARGET_BOARD_DTS_CONFIG += imx8qm-xen:imx8qm-mek-domu-car.dtb# imx8qxp auto androidTARGET_BOARD_DTS_CONFIG += imx8qxp:imx8qxp-mek-car.dtbendif # IMX_NO_PRODUCT_PARTITIONelse #PRODUCT_IMX_CAR_M4ifeq ($(IMX_NO_PRODUCT_PARTITION),true)TARGET_BOARD_DTS_CONFIG := imx8qm:imx8qm-mek-car2-no-product.dtbTARGET_BOARD_DTS_CONFIG += imx8qxp:imx8qxp-mek-car2-no-product.dtbelseifeq ($(IMX8QM_A72_BOOT),true)# imx8qm auto android without m4 image, A72 bootTARGET_BOARD_DTS_CONFIG := imx8qm:imx8qm-mek-car2-a72.dtb# imx8qm auto android without m4 image for multi-display, A72 bootTARGET_BOARD_DTS_CONFIG += imx8qm-md:imx8qm-mek-car2-md-a72.dtb# uncomment below line to build dtbo supporting multiple pcm device# TARGET_BOARD_DTS_CONFIG += imx8qm-esai:imx8qm-mek-car2-esai.dtbelse# imx8qm auto android without m4 imageTARGET_BOARD_DTS_CONFIG := imx8qm:imx8qm-mek-car2.dtb# imx8qm auto android without m4 image for multi-displayTARGET_BOARD_DTS_CONFIG += imx8qm-md:imx8qm-mek-car2-md.dtbendif# imx8qxp auto android without m4 imageTARGET_BOARD_DTS_CONFIG += imx8qxp:imx8qxp-mek-car2.dtb# imx8qm auto android without m4 image in xenTARGET_BOARD_DTS_CONFIG += imx8qm-xen:imx8qm-mek-car2-domu.dtbendif #IMX_NO_PRODUCT_PARTITIONendif #PRODUCT_IMX_CAR_M4
elseifeq ($(TARGET_USE_DYNAMIC_PARTITIONS),true)ifeq ($(IMX_NO_PRODUCT_PARTITION),true)TARGET_BOARD_DTS_CONFIG := imx8qm:imx8qm-mek-ov5640-no-product.dtbTARGET_BOARD_DTS_CONFIG += imx8qxp:imx8qxp-mek-ov5640-rpmsg-no-product.dtbelse# imx8qm standard android; MIPI-HDMI displayTARGET_BOARD_DTS_CONFIG := imx8qm:imx8qm-mek-ov5640.dtb# imx8qm standard android; MIPI panel displayTARGET_BOARD_DTS_CONFIG += imx8qm-mipi-panel:imx8qm-mek-dsi-rm67191.dtb# imx8qm standard android; HDMI displayTARGET_BOARD_DTS_CONFIG += imx8qm-hdmi:imx8qm-mek-hdmi.dtb# imx8qm standard android; HDMI and HDMI RXTARGET_BOARD_DTS_CONFIG += imx8qm-hdmi-rx:imx8qm-mek-hdmi-rx.dtb# imx8qm standard android; Multiple displayTARGET_BOARD_DTS_CONFIG += imx8qm-md:imx8qm-mek-md.dtb# imx8qm standard android; LVDS1 panel displayTARGET_BOARD_DTS_CONFIG += imx8qm-lvds1-panel:imx8qm-mek-jdi-wuxga-lvds1-panel.dtb# imx8qxp standard android; MIPI-HDMI display/*这里就是我自己指定的dtb,将原来的dtb修改为自己在kernel中指定的dtb*/TARGET_BOARD_DTS_CONFIG += imx8qxp:vt-imx8qxp-m08-a.dtbTARGET_BOARD_DTS_CONFIG += imx8dx:imx8dx-mek-ov5640.dtb# imx8qxp standard android; LVDS panel displayTARGET_BOARD_DTS_CONFIG += imx8qxp-lvds0-panel:imx8qxp-mek-jdi-wuxga-lvds0-panel-rpmsg.dtbendif #IMX_NO_PRODUCT_PARTITIONelseifeq ($(IMX_NO_PRODUCT_PARTITION),true)TARGET_BOARD_DTS_CONFIG := imx8qm:imx8qm-mek-ov5640-no-product-no-dynamic_partition.dtbTARGET_BOARD_DTS_CONFIG += imx8qxp:imx8qxp-mek-ov5640-rpmsg-no-product-no-dynamic_partition.dtbelseTARGET_BOARD_DTS_CONFIG := imx8qm:imx8qm-mek-ov5640-no-dynamic_partition.dtbTARGET_BOARD_DTS_CONFIG += imx8qxp:imx8qxp-mek-ov5640-rpmsg-no-dynamic_partition.dtbendifendif
endif #PRODUCT_IMX_CAR
/*这里面有很多定义的dtb,你需要判断对应的宏找到对应的dtb,或者去除判断直接添加对应的dtb*/

如何查看在自己编译的dts内容,每个dts编译完成后都会生成对应的dtb文件,同时还会生成对应的tmp的一个隐藏文件,在对应的out目录下(nxp的目录如下):

out/target/product/mek_8q/obj/KERNEL_OBJ/arch/arm64/boot/dts/freescale$ ls .vt-imx8qxp-m08-a.dtb.dts.tmp
.vt-imx8qxp-m08-a.dtb.dts.tmp
cluo@cluo:/sd2/VT-MX8QXP-M08-A/

可以看到我们指定的dts会有这个隐藏文件产生,然后我们可以进去查看,这个tmp文件会把所有的dts内容都编译进去,包括你头文件定义的dts,你可以在这里面查看你自己的修改是否有效或者正确。

1.2 defconfig文件

如果没有自己添加工程,那么在anroid的源码目录下会有默认的deconfig文件
目录

arch/arm64/configs/*defconfig

同样的在device目录下会有指定的路径:
当然首先是你自己的device目录需要找正确,我们可以自己添加device目录下的文件以便后期的项目分明,但是在初始的时候,我们可以自己选择对应的Lunch进行编译

device/nxp/imx8q/mek_8q$ grep "TARGET_KERNEL_DEFCONFIG" . -r
./UbootKernelBoardConfig.mk:    TARGET_KERNEL_DEFCONFIG := imx_v8_android_car_defconfig
./UbootKernelBoardConfig.mk:    TARGET_KERNEL_DEFCONFIG := imx_v8_android_car2_defconfig
./UbootKernelBoardConfig.mk:  TARGET_KERNEL_DEFCONFIG := imx_v8_android_defconfig

这里宏会指定对应的目标 deconfig 文件,我们打开这个UbootKernelBoardConfig文件

ifeq ($(PRODUCT_IMX_CAR),true)ifeq ($(PRODUCT_IMX_CAR_M4),true)TARGET_KERNEL_DEFCONFIG := imx_v8_android_car_defconfigelseTARGET_KERNEL_DEFCONFIG := imx_v8_android_car2_defconfigendif # PRODUCT_IMX_CAR_M4TARGET_KERNEL_ADDITION_DEFCONF := automotive_addition_defconfig
elseTARGET_KERNEL_DEFCONFIG := imx_v8_android_defconfigTARGET_KERNEL_ADDITION_DEFCONF := android_addition_defconfig
endif # PRODUCT_IMX_CAR

在这里面也是通过判断去走到对应的defconfig文件。
这样我们在配置一个项目后。就可以明白android是怎么去配置对应的dts的,我们自己添加项目也不会那么迷茫。

二、驱动分类

  1. Android Binder
    目录:
kernel_imx/drivers/android/binder.c
  1. 充电相关:电量计、充电管理芯片
    目录:
kernel_imx/drivers/power/supply
  1. 音频:
    基于ALSA框架的,NXP的tinymix工具好像是放在hardware的相关目录下的
    目录:
/*codec编解码相关的*/
sound/soc/codecs
/*外设端*/
sound/doc/fsl
  1. USB
    一个基于标准Linux USB gadget驱动框架的设备驱动,Android的USB驱动是基于gaeget框架
    目录:
drivers/usb/gadget/

还有很多驱动,可以自己去看看,太多了没办法一一介绍。

kernel_imx/drivers$ ls
accessibility  cdrom        dio       gpu         iio           mailbox   mtd     oprofile  pps         sbus       target       video
acpi           char         dma       greybus     infiniband    Makefile  mux     parisc    ps3         scsi       tc           virt
amba           clk          dma-buf   hid         input         mcb       mxc     parport   ptp         sfi        tee          virtio
android        clocksource  edac      hsi         interconnect  md        net     pci       pwm         sh         thermal      visorbus
ata            connector    eisa      hv          iommu         media     nfc     pcmcia    rapidio     siox       thunderbolt  vlynq
atm            counter      extcon    hwmon       ipack         memory    ntb     perf      ras         slimbus    trusty       vme
auxdisplay     cpufreq      firewire  hwspinlock  irqchip       memstick  nubus   phy       regulator   soc        tty          w1
base           cpuidle      firmware  hwtracing   isdn          message   nvdimm  pinctrl   remoteproc  soundwire  uio          watchdog
bcma           crypto       fpga      i2c         Kconfig       mfd       nvme    platform  reset       spi        usb          xen
block          dax          fsi       i3c         leds          misc      nvmem   pnp       rpmsg       spmi       vdpa         zorro
bluetooth      dca          gnss      ide         lightnvm      mmc       of      power     rtc         ssb        vfio
bus            devfreq      gpio      idle        macintosh     most      opp     powercap  s390        staging    vhost

三、Makefile和Konfig还有defconfig文件关系

Makefile文件

obj-y               += isl29020.o
obj-m               += isl29020.o
obj-n               += isl29020.o

我们可以通过这三种方式直接将需要的文件编译到内核中去,编译成模块,或者不编译名这样我们也不需要其余的Kconfig和defconfig文件

Kconfig文件
Kconfig文件是为了配合Makefile文件的

Makefile中标准的内核采用这种方式定义

obj-$(CONFIG_ISL29020)      += isl29020.o

这样的定义无法让内核知道我们要将对应的驱动编译成什么文件,所以我们需要Kconfig的来控制对应的编译
Kconfig中我们这样定义:

config ISL29020tristate "Intersil ISL29020 ambient light sensor"depends on I2C# 我们可以这样去定义编译成什么# default y# default m# default nhelpIf you say yes here you get support for the Intersil ISL29020ambient light sensor.This driver can also be built as a module.  If so, the modulewill be called isl29020.

内核中为了标准,不会在Kconfig中去定义 default y他的编译模式,而是在defconfig中去指定

deconfig中指定

CONFIG_ISL29020=y
# CONFIG_ISL29020=m
# CONFIG_ISL29020=n

所以defconfig,Kconfig, Makefile这三个文件是层层包含,即使没有Kconfig和defconfig也可以对内核进行编译。后来为了标准所以添加Kcongfig和defconfig。

四、d

Android驱动框架整理之KERNEL框架相关推荐

  1. Android驱动框架整理之UBOOT框架

    文章目录 一. 文件系统 二. 对应的板级文件修改 三.对应的一些文件说明 四.相关的编译知识 五.Makefile编译脚本 本文主要整理一下安卓的一些框架(本文介绍uboot),接触安卓半年了,写一 ...

  2. .NET平台常见技术框架整理汇总

    使用.NET平台开发有段时间了,在网上资料的基础上做了进一步整理,汇集了.NET平台常见的技术框架. 参考资料: 基于.NET平台常用的框架整理 .NET开源框架列表 1.知识网络 2.分类清单 2. ...

  3. JAVA、WEB最新技术框架整理

    JAVA.WEB最新技术框架整理 1.基础框架 1.1 后台基础框架 分布式:dubbox 统一配置:zookeeper 消息:kafka 服务化:spring spring boot 微服务化框架 ...

  4. 史上最全Android开发中100%会用到的开源框架整理(1/5)

    其实这个开源框架整理很久了,只是一直放在有道云笔记里面,笔者还有很多写得文章都放在有道云笔记里面,有时间都好好整理一下放出来,本篇文章也会不定期更新,由于整理的开源框架分类都有200多个,所有这次只将 ...

  5. Android 2018优秀开源框架整理收藏

    中级.高级.资深工程师 知其然知其不可然 <框架百大排行榜>里所提到的流行词.流行术语--使用能力.融会贯通其原理.讲解框架能力的高低,将让你不断的在这三个级别徘徊: 会有意识的合并榜单里 ...

  6. android 常用框架整理

    文章目录 UI 框架 WebView 框架 具体内容 UI 卫星菜单 节选器 下拉刷新 模糊效果 HUD与Toast 进度条 UI其他 动画 网络相关 网络连接 网络测试 图像获取 响应式编程 地图 ...

  7. android 优秀的开源框架整理

    程序员界有个神奇的网站,那就是github,这个网站集合了一大批优秀的开源框架,极大地节省了开发者开发的时间,在这里我进行了一下整理,这样可以使我们在使用到时快速的查找到,希望对大家有所帮助! 1. ...

  8. android驱动框架介绍

    android驱动框架介绍 了解android驱动框架: 1.方法1--jni调用底层驱动 在android框架中写入c/c++直接调用底层linux驱动,并向上提供jni接口给应用程序: 优点:简单 ...

  9. Android主布局框架整理

    Android主布局框架整理 本篇内容小生主要介绍的是几种常见的主框架的布局实现方式,仅供各位客官茶饭之余略微点评.闲话不说,切入正题. -No1.TabActivity+TabHost实现普通tab ...

最新文章

  1. bazel编译tensorflow 生成libtensorflow_inference.so 和 libandroid_tensorflow_inference_java.jar
  2. 40)类与类之间的关系(has use is)
  3. java 多个 panel_在Java中,每次我向JPanel添加多个东西时,第二...
  4. Oracle如何手工执行job,求助高手,JOB执行和手工执行执行结果不同,JOB执行不出来,手工却没问题...
  5. 赠与大学毕业生_出售,赠与或交易iPhone之前应该做什么
  6. mariadb数据库基础
  7. tinyint占几个字节_随笔几个小问题
  8. 乐播投屏总是自动断开_乐播投屏- 投屏常见问题 投屏在线客服
  9. 数字孪生赛博朋克风格智慧城市
  10. PRCS-1007 : Server pool egapdb already exists
  11. 2022年11月100篇 diffusion models 扩散模型 汇总!
  12. 阿里云服务部署webcron定时服务管理系统
  13. 【对讲机的那点事】手把手教你给摩托罗拉C1200数字对讲机写频
  14. 分享几款让你工作事半功倍的软件
  15. 汽车Vin码识别/手机端扫描识别汽车车架号SDK
  16. 白平衡一直标定不准的原因是什么?
  17. 群晖NAS如何开启NTP服务
  18. Python实现酷狗音乐下载-GUI版-2019-09-08版
  19. 联想笔记本电脑w530更换电池的电芯并进行软件重置,不再提示更换电池
  20. 人生必读的100本书隐私政策

热门文章

  1. 实战 | 一行命令实现看图说话(Google的im2txt模型)
  2. CentOS8安装Geant4笔记(三):Geant4介绍、编译、安装支持Qt5界面并运行exampleB1例程显示Qt界面
  3. adobe网站无法加载服务器,关于在网页上视频无法显示(有关adobe flash )
  4. 第六章(管理数据库事务)
  5. stylegan3变身艺术大师
  6. [新浪]新东方三大网红跌下神坛这一年
  7. android 高仿UC浏览器首页上拉面板效果
  8. 详解 | 大数据在智慧城市中的应用
  9. Altium Designer 10 | 常用库及部分元件名中英文对照表
  10. 软考中级哪一个好考,需要准备多久?