(1)拷贝厂家rootfs中的/lib/modules/2.6.35.7_hi3716m目录到mer的/lib/modules下。
(2)将厂家rootfs的/kmod目录到mer的/lib/modules/2.6.35.7_hi3716m/kernel下,并且将kmod目录下的usb目录拿出来和kmod平级。最终kernel的目录结构如下:
zhanghui@ubt:~/Mer/hi3716m-adaptation/2.6.35.7_hi3716m/kernel$ls
drivers fs kmod lib net usb
(3)在Mer的/etc下创建modules.load.d目录,并且在该目录下新建文件loadko.conf,其内容如下:
hi_media
hi_c51
hi_mmz
hi_common
hi_dmac
hi_gpio
hi_gpioi2c
hi_i2c
tde
hi_otp
hi_ndpt
hi_mpi
hi_svdec
hi_tuner
hifb
hi_sci
hi_ir
hi_cipher
hi_e2prom
hi_keyled
hi_wdg
jpeg
png
ehci-hcd
ohci-hcd
tntfs
loadko.conf文件的内容参考自厂家rootfs的/kmod/load脚本。
loadko.conf的作用是,Mer在启动时会根据modules-load.d目录下的*.conf文件加载驱动。
(4)在Mer的/etc/modprobe.d下增加一个或者几个*.conf文件。这里的conf文件用于指定insmod/etc/modules-load.d目录下的*.conf文件时,需要指定的参数。
我在/etc/modprobe.d下增加了一个probeko.conf文件,里面的内容是:
optionshi_common LogBufSize=0x80000
optionshi_gpioi2c gpioidclock=11 clockbit=3 gpioiddata=12 databit=5i2cmode=2
optionshifb display="on"
这就是说,Mer先找到/etc/modules-load.d/loadko.conf下,发现有”hifb”;然后找到/etc/modprobe.d/probeko.conf下有”optionshifb
display="on"”,于是实际执行的命令是:
insmodhifb.ko display=”on”
(5)确定驱动依赖关系
驱动依赖关系在/lib/modules/2.6.35.7_hi3716m/modules.dep中指定。由于在2.6.35.7_hi3716m的kernel目录加入了kmod下的ko文件,因此,modules.dep文件应该更新。
但怎么更新呢?
一开始在ks文件的%post中加入了”depmod-a”,但启动后modules.dep没改变。(现在想来,游客能应该改成”/sbin/depmod-a”)。
后来用了一个土办法:
先启动Mer,然后执行/sbin/depmod-a,将生成的modules.dep文件拷贝出来到PC的Mer的2.6.35.7_hi3716m下面,然后重新制作jffs2镜像。
(6)加入getty
在Mer的rootfs下,执行:
ln -s../serial-getty@.service./lib/systemd/system/getty.target.wants/serial-getty@ttyAMA0.service
否则Mer启动后不会出现”login:”提示。
由于bootargs指定的tty是ttyAMA0,于是需要在/etc/securetty文件中加入”ttyAMA0”这一行。
(7)加入xorg的配置
在Mer的/etc/X11/xorg.conf.d下创建*.conf文件,比如hi3716m-fb.conf:
Section"Monitor"
Identifier"Configured Monitor"
EndSection
Section"Screen"
Identifier"Default Screen"
Device"Configured Video Device"
DefaultDepth16
SubSection"Display"
Depth 16
# Modes "1024x768"
EndSubSection
EndSection
Section"Device"
Identifier"Configured Video Device"
Driver"fbdev"
Option"fbdev" "/dev/fb2"
EndSection
注意:
如果不指定displaydepth = 16,则屏幕上不显示;
如果不制定Option"fbdev" "/dev/fb2",那么xorg会默认打开fb0。而hi3716m的fb2对应高清输出,即YPbPr输出。如果接AV输出,指定/dev/fb0即可。