ohos内核,initrd,设备树启动说明
一,内核启动需要的组件 linux内核启动至少需要三个组件,bootloader,kernel image,dtb,在OHOS下除此之外还需要打开内核宏中的ACCESSOTKENID来使安全子系统 能够正常使用,否则用户态的进程都无法正常启动,主要是在binder,文件系统和创建进程中调用二,bootloader的作用 目前bootloader在嵌入式中几乎都在使用uboot,使用原厂提供即
一,内核启动需要的组件
linux内核启动至少需要三个组件,bootloader,kernel image,dtb,在OHOS下除此之外还需要打开内核宏中的ACCESSOTKENID来使安全子系统 能够正常使用,否则用户态的进程都无法正常启动,主要是在binder,文件系统和创建进程中调用
二,bootloader的作用
目前bootloader在嵌入式中几乎都在使用uboot,使用原厂提供即可,无需修改,
uboot的作用是从flash或者网络中加载内核(还可能有initrd,设备树)到内存,然后在内存中运行内核,对于uboot,我们需要重点关注的是bootargs,bootargs是在启动内核时从uboot传到内核的参数,它可覆盖设备树中的配置信息,
以3568为例,MiniAllLoader.bin,uboot.img直接使用原厂提供即可
三,内核的作用
目前ohos有三个内核可供使用,linux,liteos_a,uniproton,分别对应标准设备,小型设备,轻量设备
本例中使用linux作为内核 ,内核为OHOS的各个子系统提供功能支持,如硬件驱动,进程间通讯,ACCESSTOKENID,BINDER,HDF, 内核相关的宏可以参考https://laval.csdn.net/64b5002155562f28498884a7.html
四,设备树的作用
设备树的作用是告知内核设备的硬件信息,包括cpu的核心数及频率,电压,内存大小,寄存器地址,大小,各种接口以及bootargs等等,设备树的源文件为dts,二制文件为dtb,使用dtc进行转换,在uboot加载内存时同时加载dtb,dtb可以通过uboot 单独加载,也可以追加到zimage文件后跟随内存加载.
HDF中的hcs节点与设备树节点信息不可重复,否则会导致硬件冲突, 使用HDF的设备需要在设备树中注释掉.
1.跟随内核加载:
先使用”echo 设备dtb >> zimage”制作带有设备树的zimage,然后使用mkimage制uimage
mkimage -A arm -O linux -T kernel -C none -a 0x70008000 -e 0x70008040 -n 'Linux‘ -d zImage uImage
#tftp 0x70008000 uImage名称
#bootm uImage地址
2.直接加载到内存
#bootm uImage地址 initrd地址(没有使用”-”代替) dtb地址
bootargs可以存放在uboot中的env变量中或者设备树中的chosen节点,
以下是设备树中的chosen节点
chosen {
stdout-path = "/soc/ap-apb/serial@70100000";
bootargs = "earlycon=****_serial,0x70100000,115200n8 console=ttyS1,115200n8 loglevel=7 rdinit=/init root=/dev/mmcblk0p29 rootfstype=ext4 ro rootwait hardware=”产品名称” ohos.required_mount.system=/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/system@/usr@ext4@ro,barrier=1@wait,required ohos.required_mount.vendor=/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/vendor@/vendor@ext4@ro,barrier=1@wait,required ohos.required_mount.misc=/dev/block/platform/soc/soc:ap-ahb/20600000.sdio/by-name/misc@none@none@none@wait,required";
};
五.目前在ohos下的驱动适配方式
1.使用linux的内核态驱动与用户态驱动 //uart驱动,不需要被应用层控制
2. 使用linux的内核态驱动加上UHDF(HDF的用户态驱动)//gnss驱动,直接通过uart来驱动gnss
3.直接使用KHDF和UHDF //方便移植内核
更多推荐
所有评论(0)