EasyARM-i.MX283A 更换内核开机LOGO

EasyARM-i.MX283A 更换内核开机LOGO,需要做以下几步工作:
1、制作图片
2、编译内核
3、烧录内核

编译内核前需要安装arm-fsl-linux-gnueabi-gcc 交叉工具链

安装交叉工具链

1、获取安装包

arm-fsl-linux-gnueabi-gcc 交叉工具链下载链接
链接:https://pan.baidu.com/s/1-Dh9dLEhpvohoMMkgca6sQ
提取码:xdrf

2、安装工具链

mkdir -p /opt/freescale/usr/local
tar zxvf gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12.tar.gz -C /opt/freescale/usr/local

3、添加环境变量

在/etc/profile 下添加

export ARCH=arm
export CROSS_COMPILE=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-
export PATH=/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin:$PATH

使之生效

source /etc/profile

测试

arm-fsl-linux-gnueabi-gcc -v

编译内核

1、安装工具

sudo apt-get install netpbm

2、制作图片

pngtopnm logo.png | ppmquant -fs 224 | pnmtoplainpnm > logo_linux_clut224.ppm

其中 logo.png 是你要显示的logo图片

3、替换图片

将转换好的logo_linux_clut224.ppm文件拷贝至内核文件夹下:linux-2.6.35.3/drivers/video/logo 子目录,替换原 logo_linux_clut224.ppm 文件

扫描二维码关注公众号,回复: 11472915 查看本文章

4、编译测试内核

在内核根目录下执行
./config-kernel
make uImage

如果提示:mkimage command not found – U-Boot images will not be built 将无法生成ulmage,只能在 arch/arm/boot/目录下找到Image和zImage。那么需要执行下一步。

(PS : 其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。uImage是uboot专用的映像文件,它是在zImage之前加上一个长度为64字节的“头”,说明这个内核的版本、加载位置、生成时间、大小等信息;其0x40之后与zImage没区别。)

5、安装mkimage工具

sudo apt-get install uboot-mkimage

再次make uImage,arch/arm/boot/下就生成了ulmage

下载内核

1、搭建tftp服务器

安装

sudo apt-get install tftpd-hpa tftp-hpa

建立tftp根目录

vmuser@Linux-host ~$ sudo mkdir /tftpboot
[sudo] password for vmuser:
vmuser@Linux-host ~$ sudo chmod –R 777 /tftpboot
vmuser@Linux-host ~$ sudo chown –R nobody /tftpboot

修改配置文件

sudo vi /etc/default/tftpd-hpa

修改为:
TFTP_USERNAME=“tftp”
TFTP_DIRECTORY="/tftpboot"
TFTP_ADDRESS=“0.0.0.0:69”
TFTP_OPTIONS="-l -c -s"

修改后应该要重启一下linux虚拟机才能生效。

准备升级文件

把之前生成的uImage(内核固件)放到/tftpboot下

2、uboot连接tftp升级

进入UBOOT命令行
配置IP

MX28 U-Boot > setenv ipaddr 192.168.31.205 //开发板IP地址
MX28 U-Boot > setenv serverip 192.168.31.206 //服务器IP地址
MX28 U-Boot > saveenv //保存

ping 192.168.31.206
Using FEC0 device
host 192.168.31.206 is alive #表示网络连接畅通

执行烧写

run upkernel

完成后重启

logo更换成功

在这里插入图片描述

修改logo到屏幕中间全屏显示

以下内容参考自:https://www.cnblogs.com/ljf181275034/articles/3268169.html

(1)修改源码/driver/video/fbmem.c中的fb_show_logo_line函数

//image.dx=0;
//image.dy=y;
image.width = logo->width;
image.heigh = logo->height;

增加
+image.dx = (info->var.xres / 2) - (image.width / 2);
+image.dy = (info->var.yres / 2) - (image.height / 2);

(2)修改源码/driver/video/console/fbcon.c中的fbcon_prepare_logo()函数

在logo_height = fb_prepare_logo(info, ops->rotate);后增加下面一行代码
+logo_height += (info->var.yres / 2) - (logo_height / 2);

经过以上方式重新编译内核启动就会看到修改的内核logo能够居中全屏显示了。

在这里插入图片描述

重新烧录kernel后异常解决

重新烧录了内核后,发现开发板会自动启动示例QT程序了,而且tslib也无法正常使用,点击屏幕会出现selected device is not a touchscreen I understand

在这里插入图片描述

解决自动启动QT程序

屏蔽了/usr/share/zylauncher/start_zylauncher 里的:./framework/framework ./framework/qml/demo.qml -qws -decoration zydecoration ,示例QT程序就没自动启动了。

解决 selected device is not a touchscreen I understand

在网上找了找到文章后发现原因是内核用的EV_VERSION为0x0100000,

在这里插入图片描述

交叉编译工具/opt/freescale/usr/local/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/arm-fsl-linux-gnueabi/multi-libs/usr/include/linux/input.h 下的EV_VERSION为0x0100001
在这里插入图片描述
把这两个修改成一样就可以了。

修改内核源文件目录下include/linux/input.h EV_VERSION为0x0100001,make clean 后,重新编译内核,重新将内核烧录到开发板

然后执行
cd /usr/local/tslib/bin
./ts_calibrate

重新校准触摸屏后,一切就正常了。

猜你喜欢

转载自blog.csdn.net/tiantangmoke/article/details/107022821