cluo@cluo:/sd2/VT-MX8QXP-M08-A/device/nxp$ ls
automation_config imx6dq imx6sx imx7ulp imx8q MODULE_LICENSE_APACHE2 verity
common imx6sl imx7d imx8m imx8ulp NOTICE
在对应的目录下,我们从官网下载的代码其实已经有了对应的官方支持,已经列举了几个支持的板级目录,就是上面的 imx6q imx8q imx8m 这些.
cluo@cluo:/sd2/VT-MX8QXP-M08-A/device/nxp/common$ ls
audio-json imx_path input partition seccomp_policy tools
build init kernel-headers recovery security wifi
还有一个公用的内容就放在从common目录下,比如说audio的相关配置文件就在 audio-json 这个目录下,因为我也是后面才了解到,nxp这边是通过配置文件 json去配置相关寄存器的设置的,所以之前调试es8316的时候,还弄了几天。
对应的一些路径文件就在 imx_path 这个里面的 .mk文件中可以看到定义的路径宏
input目录下是一些触摸相关的配置文件,比如之前说过的触摸屏幕变为鼠标如何进行修改等等。
tools目录下就是imx的相关编译和烧录脚本和一些打包脚本。
进入到imx8q的目录下,这里面就是对应的板级目录了
cluo@cluo:/sd2/VT-MX8QXP-M08-A/device/nxp/imx8q$ ls
AndroidProducts.mk mek_8q sepolicy
BoardConfigCommon.mk permissions sepolicy_car
com.example.android.systemupdatersample.xml ProductConfigCommon.mk UbootKernelCommonConfig.mk
AndroidProducts.mk 这个目录下看到对应的lunch文件选择项
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/mek_8q/mek_8q.mk \
$(LOCAL_DIR)/mek_8q/mek_8q_car.mk \
$(LOCAL_DIR)/mek_8q/mek_8q_car2.mk
COMMON_LUNCH_CHOICES := \
mek_8q-user \
mek_8q-userdebug \
mek_8q_car-user \
mek_8q_car-userdebug \
mek_8q_car2-user \
mek_8q_car2-userdebug
上面是编译对应的mk文件,下面就是你编译之前选择lunch的时候的选项,包括以后自己去添加工程的时候,也是在这里添加对应的lunch和mk文件
BoardConfigCommon.mk: 这个里面应该是一些配置说明,没有仔细去了解过这里面配置,我也不太清楚这里面的东西又啥用,没去修改验证过。
sepolicy 这里面都是一些 te文件,也就是关于权限的 允许 读 写 这些:
allow init configfs:dir { write add_name remove_name create };
//据个例子
//允许 Init域 可以对 configfs这个目录下的文件进行 写 添加和 删除 创造等
更具体的语法就没去细致了解过了
再下面的就是mek_8q文件了。这就是细致的文件说明了
cluo@cluo:/sd2/VT-MX8QXP-M08-A/device/nxp/imx8q/mek_8q$ ls
4G_modem car_display_settings.xml init.recovery.nxp.rc seccomp
android_addition_defconfig compatibility_matrix.xml init.usb.rc sepolicy
AndroidBoard.mk core_64_bit_car.mk init.zygote_auto.rc sepolicy_car
AndroidUboot.mk device_framework_matrix.xml input-port-associations.xml setup.core.car2.cfg
AP6275 early.init_car.cfg mag_sensor setup.core.cfg
apns-conf.xml early.init.cfg manifest_car.xml setup.main.car2.cfg
app_whitelist.xml eeprom manifest.xml setup.main.cfg
audio_effects_car.xml external_camera_config.xml mek_8q_car2.mk SharedBoardConfig.mk
audio_effects.xml firmware mek_8q_car.mk system.prop
audio_policy_configuration_car.xml fstab.nxp mek_8q.mk task_profiles.json
audio_policy_configuration.xml fstab.nxp.car modem thermal_info_config_imx8qm_car2.json
automotive_addition_defconfig init_car_m4.rc nfc thermal_info_config_imx8qm.json
bluetooth init_car_no_m4.rc overlay thermal_info_config_imx8qxp_car2.json
BoardConfig.mk init_car.rc overlay_car thermal_info_config_imx8qxp.json
camera_config_imx8qm.json init.imx8qm.rc powerhint_imx8qm.json TP
camera_config_imx8qm_logic.json init.imx8qxp.rc powerhint_imx8qxp.json UbootKernelBoardConfig.mk
camera_config_imx8qxp.json init.insmod.sh privapp-permissions-imx.xml ueventd.nxp.rc
camera_config_imx8qxp_logic.json init.rc required_hardware_auto.xml
car_audio_configuration.xml init.recovery.nxp.car.rc required_hardware.xml
这里面的东西还是比较多的,有的是自己添加的,有的是他原来自己有的
首先这里面有一些json配置文件,主要是关于camera的,我猜测可能nxp的这个平台又是通过对应的json文件对camera的相关设置进行一些配置。
xml就是一些配置文件,里面很多东西,包括界面上一些默认的选项是不是会打开等等,这个有兴趣可以自己去看一看。
这里里面还有一些rc文件,这里面我们修改会比较多一些,主要是对文件权限进行修改,按照里面的内容仿照写就好了。
首先就是了解一些函数, 用得最多的就是 PRODUCT_COPY_FILES 这个函数了
这个函数的最广泛作用其实就是将文件从pc端的目录下拷贝到对应开发板端
PRODUCT_COPY_FILES += \
device/nxp/imx8q/mek_8q/firmware/WiFi/fw_bcm43752a2_pcie_ag_apsta.bin:vendor/etc/firmware/bcm/fw_bcm43752a2_pcie_ag_apsta.bin \
device/nxp/imx8q/mek_8q/firmware/WiFi/fw_bcm43752a2_pcie_ag.bin:vendor/etc/firmware/bcm/fw_bcm43752a2_pcie_ag.bin \
device/nxp/imx8q/mek_8q/firmware/WiFi/fw_bcmdhd.bin:vendor/etc/firmware/bcm/fw_bcmdhd.bin \
我们在根目录下的对应的文件会被拷贝到对应的开发板的vendor/etc/firmaware/bcm/的目录下,我们进入开发板也能看到对应的文件,或者在对应的out目录下也能看到对应的文件
cluo@cluo:/sd2/VT-MX8QXP-M08-A/out/target/product/mek_8q$ find -name "fw_bcm43752a2_pcie_ag_apsta.bin"
./vendor/etc/firmware/bcm/fw_bcm43752a2_pcie_ag_apsta.bin
对应的工程文件里面的内容我们需要自己去写,这里只介绍相关的Android.mk文件的编写,因为这个文件会决定我们是否是编译到。
/i2c_rw_tool$ ls
Android.mk i2c_rw_tool.c write_i2c.sh
比如说我们在i2c_rw_tool下有三个文件,其实我们Android.mk文件内容就是下面这些
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
ifeq ($(SPEC_FOR_5071_TMFP),true)
LOCAL_CFLAGS += -DCONFIG_SPEC_FOR_5071_TMFP
else
endif
# // 上面的部分都是固定的模板,可以直接把对应的mk文件移植过来
LOCAL_MODULE = i2c_rw
LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := i2c_rw_tool.c
# // 只有中间三行是需要修改的
# // LOCAL_MODULE 代表你要编译生成的模块,这个名字也很总要,因为等会要通过 PRODUCT_COPY_FILES 这个函数在板级的mk文件里添加,这样才能够编译到这个目录
# // LOCAL_MODULE_TAGS 这个是模块的标签,公开的还是私有的
# // LOCAL_SRC_FILES 这个是编译需要的c文件
# // 最后这个也司模板
include $(BUILD_EXECUTABLE)
// 我们在对应的板级mk中添加下面的这段话就可以编译进去了
// mek-8q.mk
PRODUCT_PACKAGES += eepromtool
其实这个在之前的kernel的整理中已经说了,这里就不在重复了。