KMS是Kemmel Mode Setting的缩写,内核显示模式设置。它主要负责显示的控制,包括屏幕分辨率、屏幕刷新率和颜色深度等等。
CRTC是指显示控制器,在DRM里有多个显存,通过操作CRTC来控制要显示那个显存。
KMS包含了FB框架。DRM驱动默使用CRTC来控制,CRTC是可以模仿FB框架,实现使用FB接口。
1、使能DRM的FB支持
1)、打开终端。
2)、输入“cd linux/atk-mp1/linux/my_linux/linux-5.4.31/回车”,切换到“linux/atk-mp1/linux/my_linux/linux-5.4.31/”目录;
3)、输入“make menuconfig回车”,打开linux内核图形化配置界面:
4)、移动“向下光标”至“Device Drivers”,得到下图:
5)、按“回车键”,移动“向下光标”至“Graphics support”,得到下图:
6)、按“回车键”,移动“向下光标”至“Direct Rendering Manager (XFree86 4.1.0 and higher DRI support”,得到下图:
7)、按“回车键”,移动“向下光标”至“Enable legacy fbdev support for your modesetting driver”,按下“Y键”(使能DRM的FB支持),得到下图:
8)、先“保存”,按“TAB键”至“Save”,按下“回车键”,得到下面的界面。
9)、输入“./arch/arm/configs/stm32mp1_atk_defconfig”,移动“向下光标键”至“Ok”,得到下图:
10)、按“回车键”,保存完成。得到下面的界面。
11)、按“回车键”,退出保存界面。
2、使能PL110
1)、移动“光标”至“Exit”,直到出现下面的界面:
2)、按“回车键”,移动“向下光标”至“Frame buffer Devices”,得到下图:
3)、按“回车键”,移动“向下光标”至“Support for frame buffer devices”,按“Y键”,得到下图:
4)、先“保存”,按“TAB键”至“Save”,按下“回车键”,得到下面的界面。
5)、输入“./arch/arm/configs/stm32mp1_atk_defconfig”,移动“向下光标键”至“Ok”,得到下图:
6)、按“回车键”,保存完成。得到下面的界面。
7)、按“回车键”,退出保存界面。
再次按“回车键”,移动“向下光标”至“ARM PrimeCell PL110 support”,按“Y键”(选中,支持 选中,支持 /dev/fb0),得到下图:
8)、先“保存”,按“TAB键”至“Save”,按下“回车键”,得到下面的界面。
9)、输入“./arch/arm/configs/stm32mp1_atk_defconfig”,移动“向下光标键”至“Ok”,得到下图:
10)、按“回车键”,保存完成。得到下面的界面。
11)、按“回车键”,退出保存界面。
3、使能Linux logo显示
1)、移动“光标”至“Exit”,直到出现下面的界面:
2)、按“回车键”,移动“向下光标”至“Bootup logo”,按“Y键”,得到下图:
3)、先“保存”,按“TAB键”至“Save”,按下“回车键”,得到下面的界面。
4)、输入“./arch/arm/configs/stm32mp1_atk_defconfig”,移动“向下光标键”至“Ok”,得到下图:
5)、按“回车键”,保存完成。得到下面的界面。
6)、按“回车键”,退出保存界面,得到下面的界面:
7)、再次按“回车键”,得到下图:
8)、移动向下光标,按“Y键”,选中“Standard black and white Linux logo”;
移动向下光标,按“Y键”,选中“Standard 16-color Linux logo”;
移动向下光标,按“Y键”,选中“Standard 224-color Linux logo”;
9)、先“保存”,按“TAB键”至“Save”,按下“回车键”,得到下面的界面。
10)、输入“./arch/arm/configs/stm32mp1_atk_defconfig”,移动“向下光标键”至“Ok”,得到下图:
11)、按“回车键”,保存完成。得到下面的界面。
12)、按“回车键”,退出保存界面。然后按“ESC键”,直到得到下面的界面:
13)、输入“make stm32mp1_atk_defconfig回车”,注意:如果忘记执行,可能再次打开时会发现“.config”没有被更新,得到下图:
5、编译设备树
①在终端,输入“make uImage dtbs LOADADDR=0XC2000040 -j8回车”,执行编译“Image”和“dtbs”,并指定装载的起始地址为0XC2000040,j8表示指定采用8线程执行。“make dtbs”,用来指定编译设备树。见下图:
②输入“ls arch/arm/boot/uImage -l”
查看是否生成了新的“uImage”文件
③输入“ls arch/arm/boot/dts/stm32mp157d-atk.dtb -l”
查看是否生成了新的“stm32mp157d-atk.dtb”文件
4)、拷贝输出的文件:
①输入“cp arch/arm/boot/uImage /home/zgq/linux/atk-mp1/linux/bootfs/ -f回车”,执行文件拷贝,准备烧录到EMMC;
②输入“cp arch/arm/boot/dts/stm32mp157d-atk.dtb /home/zgq/linux/atk-mp1/linux/bootfs/ -f回车”,执行文件拷贝,准备烧录到EMMC
③输入“cp arch/arm/boot/uImage /home/zgq/linux/tftpboot/ -f回车”,执行文件拷贝,准备从tftp下载;
④输入“cp arch/arm/boot/dts/stm32mp157d-atk.dtb /home/zgq/linux/tftpboot/ -f回车”,执行文件拷贝,准备从tftp下载;
⑤输入“ls -l /home/zgq/linux/atk-mp1/linux/bootfs/回车”,查看“/home/zgq/linux/atk-mp1/linux/bootfs/”目录下的所有文件和文件夹
⑥输入“ls -l /home/zgq/linux/tftpboot/回车”,查看“/home/zgq/linux/tftpboot/”目录下的所有文件和文件夹
⑦输入“chmod 777 /home/zgq/linux/tftpboot/stm32mp157d-atk.dtb回车”
给“stm32mp157d-atk.dtb”文件赋予可执行权限
⑧输入“chmod 777 /home/zgq/linux/tftpboot/uImage回车” ,给“uImage”文件赋予可执行权限
⑨输入“ls /home/zgq/linux/tftpboot/ -l回车”,查看“/home/zgq/linux/tftpboot/”目录下的所有文件和文件夹
6、设置LCD作为终端控制台
1)、重启开发板,等串口显示“Hit any key to stop autoboot”,立即按下“回车键”;
输入“setenv bootargs 'console=tty1 console=ttySTM0,115200 root=/dev/nfs nfsroot=192.168.2.180:/home/zgq/linux/nfs/rootfs,proto=tcp rw ip=192.168.2.178:192.168.2.180:192.168.2.1:255.255.255.0::eth0:off'回车”。
“console=tty1”表示将LCD屏幕作为控制台。
“console=ttySTM0,115200”设置串口作为控制台。
输入“saveenv回车”。
输入“boot回车”,启动。
输入“cd /回车”
输入“ls回车”
输入“cd etc/回车”
输入“ls回车”
2)、输入“vi inittab回车”,打开inittab文件
按“A”,移动“光标”至“console::respawn:/sbin/getty -L console 0 vt100 # GENERIC_SERIAL”的下一行,添加“tty1::askfirst:-/bin/sh”,见下图:
3)、按“ESC键”,然后输入“:wq回车”
输入“reboot回车”重启开发板;启动完成后,LCD显示如下:
4)、输入“echo hello linux! > /dev/tty1回车”,LCD显示“hello linux!”,见下图:
7、取消LCD作为终端控制台
1)、重启开发板,等串口显示“Hit any key to stop autoboot”,立即按下“回车键”;
输入“setenv bootargs 'console=ttySTM0,115200 root=/dev/nfs nfsroot=192.168.2.180:/home/zgq/linux/nfs/rootfs,proto=tcp rw ip=192.168.2.178:192.168.2.180:192.168.2.1:255.255.255.0::eth0:off'回车”。
“console=ttySTM0,115200”设置串口作为控制台。
输入: saveenv,保存bootcmd的值
2)、输入: boot,启动 Linux 系统
等待开发板启动完成,输入“root回车”
输入“cd /回车”
输入“ls回车”
输入“cd etc/回车”
按“A”,移动光标至“console::respawn:/sbin/getty -L console 0 vt100 # GENERIC_SERIAL”的下一行,在“tty1::askfirst:-/bin/sh”添加“#”,见下图:
3)、按“ESC键”,输入“:wq回车”保存退出,得到下图:
4)、输入“reboot回车”重启开发板。
等待开发板启动完成,输入“root回车”
输入“cd /回车”
输入“ls回车”
输入“echo hello linux! > /dev/tty1回车”
8、LCD背光调节
1)、给开发板上电,等待开发板启动完成,输入“root回车”;
输入“ls回车”
输入“cd /回车”
输入“ls回车”
输入“cd /sys/class/pwm/回车”
输入“ls回车”
输入“cd pwmchip0/回车”,查询到“pwmchip0对应的是TIM4”
2)、输入“cd /sys/devices/platform/backlight/backlight/backlight回车”
输入“cat max_brightness回车”,查询最大亮度等级;
输入“cat brightness回车”,查询当前亮度等级;
输入“echo 6 > brightness回车”,设置当前亮度等级为6
输入“echo 0 > brightness回车”,设置当前亮度等级为0
输入“echo 6 > brightness回车”,设置当前亮度等级为6
输入“cat brightness回车”,查询当前亮度等级;
见下图: