CN103793233B - 一种基于uboot实现用户界面图形显示的方法 - Google Patents
一种基于uboot实现用户界面图形显示的方法 Download PDFInfo
- Publication number
- CN103793233B CN103793233B CN201410069024.2A CN201410069024A CN103793233B CN 103793233 B CN103793233 B CN 103793233B CN 201410069024 A CN201410069024 A CN 201410069024A CN 103793233 B CN103793233 B CN 103793233B
- Authority
- CN
- China
- Prior art keywords
- uboot
- lcd
- picture
- resolution
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Landscapes
- Controls And Circuits For Display Device (AREA)
- Control Of Indicators Other Than Cathode Ray Tubes (AREA)
Abstract
本发明公开了一种基于uboot实现用户界面图形显示的方法,通过在uboot中添加LCD驱动,将用户图形界面图片与uboot源码中系统默认图片替换,并且突破uboot文件不能超过240KB的限制,来达到在uboot下通过LCD显示图形用户界面的效果,本方法为uboot提供了良好的用户交互界面,让仅仅能够引导加载程序的uboot程序能够提供图形用户界面,扩展了uboot的适用范围,具有显著的效果和很强的实用性。
Description
技术领域
本发明属于计算机系统技术领域,涉及一种基于uboot实现用户界面图形显示的方法。
背景技术
uboot为bootloader引导加载程序的一种,是系统启动前最开始执行的程序,作用为初始化设备硬件,引导加载系统程序。在操作系统启动之后,LCD(Liquid Crystal Display,液晶显示器)才能够显示图形图像,现有uboot无法通过LCD显示与用户交互性能良好的图形界面,限制了uboot的使用范围。
Uboot作为操作系统启动的引导程序,并未编写如LCD驱动代码,也就无法通过LCD显示图形化的用户界面,然而很多应用场合需要在系统启动前完成与用户的交互,如操作系统的选择性启动,实时性系统的实时监控与操作等都需要在操作系统启动前完成用户交互。
发明内容
本发明提供了一种基于uboot实现用户界面图形显示的方法,其目的在于,解决现有技术中在操作系统未启动时,无法为用户提供LCD方式下uboot图形化的操作界面。
一种基于uboot实现用户界面图形显示的方法,其特征在于,包括以下几个步骤:
步骤1:扩大uboot启动大小限制参数;
uboot启动大小限制参数是指启动uboot所需的可烧写文件大小参数;
步骤2:在uboot源码中添加LCD驱动代码和头文件;
步骤3:将需要显示的用户界面图形图片转化为LCD可读取的图片,并以数组存储形式存储,设定图片数组名称为imagedata[];并将图片数组imagedata[]替换/include/linux_logo.h中uboot自带的Linux系统图片数组unsigned char linux_logo[];
步骤4:编译uboot可烧写文件,并将可烧写文件烧写至开发板上,开发板上电启动uboot,实现图像用户界面的显示;
步骤2中所述的添加LCD驱动代码和文件包括以下几个部分:
1)在待显示的图片配置头文件中指定显示图片位于LCD中的位置、大小以及支持显示图片的类型,同时将串口显示更改为LCD显示;
2)建立处理器平台帧缓冲设备寄存器的定义头文件,从Linux内核源码中直接获得;
3)如果LCD的分辨率不属于uboot源码定义了的成员,则需要注册新的分辨率成员,否则,进入下一个步骤4);
注册新的分辨率成员:在图形显示模块驱动的定义文件driver/video/videomodes.c中添加 新分辨率的Vesa模式结构体ctfb_vesa_modes与解析结构体ctfb_res_modes成员,同时在负责显示模块的videomodes.h文件中将显示模式修改为对应分辨率显示模式,修改显示模式计数(VESA_MODES_COUNT)为所有的显示模式总数、修改解析模式计数(RES_MODES_COUNT)与存在的分辨率成员数一致、增加新的分辨率的成员宏定义;
4)在处理器头文件中增加ELFIN_FB_BASE基址、LCD片选及LCD_SEL掩码的定义,ELFIN_FB_BASE基址、LCD片选及LCD_SEL掩码的定义值与2011.06版本的uboot源码中对应变量的定义值保持一致;
5)将LCD驱动实现文件存储于路径driver/下,LCD驱动实现文件完成驱动LCD显示图片。
LCD驱动实现文件可以从现有技术中获得,如s3c6410_fb.c;
所述步骤1中uboot启动大小限制参数扩大为1MB以上。
在所述步骤3中对彩色帧缓冲驱动控制台文件中图片的分辨率参数进行修改,使得图片的分辨率参数LINUX_LOGO_WIDTH、LINUX_LOGO_HEIGHT与存储器中存储的图片分辨率一致,并且图片分辨率不能够大于LCD分辨率。
有益效果
本发明提供了一种在uboot中实现图形用户界面的方法,通过使用添加了LCD驱动和用户图形界面图片的uboot源码,成功实现了在操作系统之前启动的uboot程序中显示图形用户界面的效果,从而解决了uboot中无法显示图形用户界面的难题,通过本方法,对于用户而言,可以在系统启动之前完成图形化的操作,达到良好的用户体验;对于uboot而言,传统的uboot仅仅用作操作系统的前端引导程序,无法与用户交互,通过本发明方法用户也能够使用操作系统中熟悉的图形界面来与uboot程序交互,将uboot从幕后转向台前,丰富了uboot的功能,扩展了uboot的应用范围,具有较强的实用性与创新性。
附图说明
图1为本发明所述方法的流程图;
图2为应用本发明得到的实例效果图。
具体实施方式
下面将结合附图和实施例对本发明作进一步的说明。
一种基于uboot实现用户界面图形显示的方法,其特征在于,包括以下几个步骤:
步骤1:扩大uboot启动大小限制参数;
uboot启动大小限制参数是指启动uboot所需的可烧写文件大小参数;
步骤2:在uboot源码中添加LCD驱动代码和头文件;
步骤3:将需要显示的用户界面图形图片转化为LCD可读取的图片,并以数组存储形式存储,设定图片数组名称为imagedata[];并将图片数组imagedata[]替换/include/linux_logo.h中uboot自带的Linux系统图片数组unsigned char linux_logo[];
步骤4:编译uboot可烧写文件,并将可烧写文件烧写至开发板上,开发板上电启动uboot,实现图像用户界面的显示;
步骤2中所述的添加LCD驱动代码和文件包括以下几个部分:
1)在待显示的图片配置头文件中指定显示图片位于LCD中的位置、大小以及支持显示图片的类型,同时将串口显示更改为LCD显示;
2)建立处理器平台帧缓冲设备寄存器的定义头文件,从Linux内核源码中直接获得;
3)如果LCD的分辨率不属于uboot源码定义了的成员,则需要注册新的分辨率成员,否则,进入下一个步骤4);
注册新的分辨率成员:在图形显示模块驱动的定义文件driver/video/videomodes.c中添加新分辨率的Vesa模式结构体ctfb_vesa_modes与解析结构体ctfb_res_modes成员,同时在负责显示模块的videomodes.h文件中将显示模式修改为对应分辨率显示模式,修改显示模式计数(VESA_MODES_COUNT)为所有的显示模式总数、修改解析模式计数(RES_MODES_COUNT)与存在的分辨率成员数一致、增加新的分辨率的成员宏定义;
4)在处理器头文件中增加ELFIN_FB_BASE基址、LCD片选及LCD_SEL掩码的定义,ELFIN_FB_BASE基址、LCD片选及LCD_SEL掩码的定义值与2011.06版本的uboot源码中对应变量的定义值保持一致;
5)将LCD驱动实现文件存储于路径driver/下,LCD驱动实现文件完成驱动LCD显示图片。
LCD驱动实现文件可以从现有技术中获得,如s3c6410_fb.c;
所述步骤1中uboot启动大小限制参数扩大为1MB以上。
在所述步骤3中对彩色帧缓冲驱动控制台文件中图片的分辨率参数进行修改,使得图片的分辨率参数LINUX_LOGO_WIDTH、LINUX_LOGO_HEIGHT与存储器中存储的图片分辨率一致,并且图片分辨率不能够大于LCD分辨率。
本实例硬件采用飞凌公司的OK6410开发板,此开发板采用Samsung S3C6410处理器,ARM1176JZF-S内核,主频533MHz/667MHz,256M字节DDR内存,2G Byte Nand Flash。
LCD采用OK6410配套的7寸群创FIT-LCD7.0TFT液晶屏,800×480分辨率,系统结构示意图如图1所示。
实施例1
本实例通过对飞凌公司提供的uboot1.1.6源码进行移植与修改,并将编译后的uboot代码烧写入OK6410-B开发板中,uboot启动后驱动7寸群创LCD,LCD显示用户图形界面,等待用户选择执行程序。
具体步骤如图1所示:
步骤1:修改uboot启动大小限制,在uboot源码中修改参数,使得启动的uboot可烧写文件在大于240KB的时候也能够成功启动,此必要条件是设置的参数大小必须大于uboot可烧写文件大小;
Uboot启动分为两个阶段:汇编语言阶段与C语言阶段,汇编语言主要负责初始化硬件,C语言主要负责驱动硬件设备,拷贝程序文件至内存中。汇编语言执行完成后通过执行blcopy_uboot_to_ram来将位于nand flash存储器中uboot程序拷贝至内存RAM中执行,拷贝程序的大小在Nand_cp.c中通过参数来控制,uboot默认拷贝240KB大小的文件至内存RAM中执行。
具体的,通过修改位于uboot/cpu/s3c64xx目录下Nand_cp.c(此文件实现将程序从存储器中拷贝至内存中)中拷贝程序大小的参数,来改变uboot从存储器中拷贝至内存中程序块的大小,我们将此参数修改为1MB,此大小能够满足要求。
步骤2:添加LCD驱动,在uboot中并没有自带LCD驱动程序,通过在uboot源码中添加代码与文件,实现驱动LCD显示;
在飞凌提供的uboot源码中,并未提供LCD驱动程序,此部分需要添加与修改源码。
具体的,通过在uboot源码中添加代码与文件、修改配置参数来实现LCD驱动:
第一步,在uboot源码include/configs/smdk6410.h(与CPU相关的待显示的图片存储配置头文件)中配置显示图片位于LCD中的位置、大小以及支持显示图片的类型、将通过串口显示的信息改为通过LCD显示;
具体的,
#define CONFIG_VIDEO_LOGO
表示图片由屏幕左上角开始显示
#define VIDEO_FB_16BPP_WORD_SWAP
表示支持BMP格式图片显示
"stderr=serial\0"
表示串口信息通过LCD显示
第二步,在include/asm-arm/arch-s3c64xx中建立处理器平台的新模式帧缓冲设备寄存器(framebuffer register)定义头文件regs-fb.h、regs-fb-v4.h,其中regs-fb.h为S3C64XX系列处理器相关寄存器定义、regs-fb-v4.h代表S3C处理器相关寄存器定义,此两个源文件位于linux-3.0.1内核源码目录linux-3.0.1\arch\arm\plat-samsung\include\plat下,直接拷贝过来即可,建立两个头文件的作用在于将寄存器地址映射为具有语义的变量名,方便程序的编写与阅读;
第三步,uboot源码中存在6种分辨率成员,分别是:640×480、800×600、1024×768、960×720、1152×864、1280×1024,并不包含800×480分辨率,添加800×480分辨率结构体成员需要修改driver/video/videomodes.c(图形显示模块驱动的定义文件)和driver/video/videomodes.h(与图形显示模块驱动定义对应的声明头文件)。
具体的,需要在videomodes.c文件中,向Vesa模式结构体ctfb_vesa_modes与解析结构体ctfb_res_modes中添加代表800×480分辨率的结构体成员,此步骤的作用在于向uboot注册800×480分辨率成员。
其中ctfb_vesa_modes结构体定义为:
添加的800×480分辨率的ctfb_vesa_modes结构体成员为:
{0x213,RES_MODE_800x480,16},
其中0x213代表vesanr,即Vesa(Video Electronics Standards Association,视频电子标准协会)号;
RES_MODE_800x480代表resindex,即解析结构体ctfb_res_modes的索引;
16代表bits_per_pixel,即每一像素的bit数。
解析结构体ctfb_res_modes结构体定义为:
新增的800×480分辨率的解析结构体ctfb_res_modes成员为
{800,480,50000,2,2,2,2,41,4,0,FB_VMODE_NONINTERLACED},
其中800,480代表xres,yres,即水平与垂直方向的解析度;
50000代表pixclock,即每微秒的像素时钟个数;
2,2,2,2依次代表left_margin、right_margin、upper_margin、lower_margin,即从行同步到图像左边沿的像素时钟数、从行同步到图像右边沿的像素时钟数、从场同步到图像上边沿的行数、从场同步到图像下边沿的行数;
41代表hsync_len,即行同步时间长度;
4代表vsync_len,即场同步时间长度;
0代表sync,即同步极性设置;
FB_VMODE_NONINTERLACED代表vmode,即使用FB_VMODE_NONINTERLACED的扫描形式。
在负责显示模块的videomodes.h文件中修改默认显示模式、显示模式计数、增加800×480分辨率模式的宏定义,代码如下:
修改:
#define CONFIG_SYS_DEFAULT_VIDEO_MODE0x212
表示分辨率800×480的显示模式代号为0x212;
#define VESA_MODES_COUNT20
表示显示模式计数为20。
添加:
#define RES_MODE_800x4806
定义800×480分辨率成员代号为6;
#define RES_MODES_COUNT7
将RES_MODES_COUNT由源码默认的6改为7,表示新增一个分辨率成员。
第四步,在include/s3c6400.h(与s3c6400处理器硬件相关头文件)和include/s3c64x0.h(与s3c64x0处理器硬件相关头文件)中增加处理器S3C6410对LCD的支持,在include/s3c6400.h中添加如下代码:
#define ELFIN_FB_BASE0x77100000
#define LCD_SEL0
#define LCD_SEL_MASK0x03
以上三个添加的宏定义定义了ELFIN_FB_BASE基址、LCD片选、LCD_SEL掩码。
上述宏定义与函数拷贝于uboot源码内容,u-boot-2011.06/arch/arm/include/asm/arch-s3c64xx/s3c6400.h
此函数作用在于返回ELFIN_FB_BASE的指针。
在include/s3c64x0.h中增加对LCD控制器的寄存器结构体定义,此步骤作用在于将LCD控制器的寄存器组织为结构体,方便后续函数对控制寄存器的操作,部分代码如下:
此结构体定义可参见参考文献1;
第五步,在driver/新建LCD驱动的实现文件s3c6410_fb.c,此文件内包含的内容为LCD驱动的定义函数,实现的功能是驱动LCD显示图像,其中驱动实现文件s3c6410_fb.c可参见参考文献2。
步骤3:设置显示的图形用户界面图片分辨率,将需要显示的图形用户界面图片存放至数组,将系统默认图片数组替换至新数组;
具体的,步骤3分为以下步骤执行:
第一步,在/drivers/cfb_console.c(彩色帧缓冲驱动控制台文件,主要定义彩色图片输出控制)中修改图片分辨率,修改LINUX_LOGO_WIDTH、LINUX_LOGO_HEIGHT与图片分辨率一致;
第二步,将图片通过使用类似image2lcd的转化工具转化为LCD能够读取执行的数组imagedata[];
第三步,将/include/linux_logo.h(图标数组头文件,存放linux小企鹅系统图标)中uboot自带的Linux系统图片数组unsigned char linux_logo[]替换为第二步生成的imagedata[];
步骤4:编译生成uboot可烧写文件,烧写至开发板,上电启动uboot;
步骤5:执行LCD驱动程序,显示步骤3中的图形用户界面,如图2所示,发系统在uboot中显示图形显示界面,等待用户选择需要启动的操作系统;
参考文献
参考文献1:http://www.linuxidc.com/Linux/2012-09/69919p6.htm
参考文献2:
http://github.com/tekkamanninja/u-boot-2010.09-for-MINI6410/commit/96bd9368bb09c56e2a91785c459850af2aed92d1
Claims (3)
1.一种基于uboot实现用户界面图形显示的方法,其特征在于,包括以下几个步骤:
步骤1:扩大uboot启动大小限制参数;
步骤2:在uboot源码中添加LCD驱动代码和头文件;
步骤3:将需要显示的用户界面图形图片转化为LCD可读取的图片,并以数组存储形式存储,设定图片数组名称为imagedata[];并将图片数组imagedata[]替换/include/linux_logo.h中uboot自带的Linux系统图片数组unsigned char linux_logo[];
步骤4:编译uboot可烧写文件,并将可烧写文件烧写至开发板上,开发板上电启动uboot,实现图像用户界面的显示;
步骤2中所述的添加LCD驱动代码和文件包括以下几个部分:
1)在待显示的图片配置头文件中指定显示图片位于LCD中的位置、大小以及支持显示图片的类型,同时将串口显示更改为LCD显示;
2)建立处理器平台帧缓冲设备寄存器的定义头文件,从Linux内核源码中直接获得;
3)如果LCD的分辨率不属于uboot源码定义了的成员,则需要注册新的分辨率成员,否则,进入下一个步骤4);
注册新的分辨率成员:在图形显示模块驱动的定义文件driver/video/videomodes.c中添加新分辨率的Vesa模式结构体ctfb_vesa_modes与解析结构体ctfb_res_modes成员,同时在负责显示模块的videomodes.h文件中将显示模式修改为对应分辨率显示模式,修改显示模式计数为所有的显示模式总数、修改解析模式计数与存在的分辨率成员数一致、增加新的分辨率的成员宏定义;
4)在处理器头文件中增加ELFIN_FB_BASE基址、LCD片选及LCD_SEL掩码的定义,ELFIN_FB_BASE基址、LCD片选及LCD_SEL掩码的定义值与2011.06版本的uboot源码中对应变量的定义值保持一致;
5)将LCD驱动实现文件存储于路径driver/下,LCD驱动实现文件完成驱动LCD显示图片。
2.根据权利要求1所述的基于uboot实现用户界面图形显示的方法,其特征在于,所述步骤1中uboot启动大小限制参数扩大为1MB以上。
3.根据权利要求2所述的基于uboot实现用户界面图形显示的方法,其特征在于,在所述步骤3中对彩色帧缓冲驱动控制台文件中图片的分辨率参数进行修改,使得图片的分辨率参数LINUX_LOGO_WIDTH、LINUX_LOGO_HEIGHT与存储器中存储的图片分辨率一致,并且图片分辨率不能够大于LCD分辨率。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410069024.2A CN103793233B (zh) | 2014-02-27 | 2014-02-27 | 一种基于uboot实现用户界面图形显示的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410069024.2A CN103793233B (zh) | 2014-02-27 | 2014-02-27 | 一种基于uboot实现用户界面图形显示的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103793233A CN103793233A (zh) | 2014-05-14 |
CN103793233B true CN103793233B (zh) | 2016-11-23 |
Family
ID=50668950
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410069024.2A Expired - Fee Related CN103793233B (zh) | 2014-02-27 | 2014-02-27 | 一种基于uboot实现用户界面图形显示的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103793233B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105068835B (zh) * | 2015-08-05 | 2021-02-26 | 惠州Tcl移动通信有限公司 | 移动终端及其调试信息显示方法 |
CN106126292A (zh) * | 2016-06-29 | 2016-11-16 | 浪潮集团有限公司 | 一种基于uboot的启动界面实现方法 |
CN109284151B (zh) * | 2017-07-19 | 2022-06-07 | 龙芯中科技术股份有限公司 | 显示方法、显示装置及可读存储介质 |
CN110083420A (zh) * | 2019-04-10 | 2019-08-02 | 山东超越数控电子股份有限公司 | 一种基于uboot的启动界面实现方法,系统,终端机及可读存储介质 |
CN112988133A (zh) * | 2021-03-12 | 2021-06-18 | 麒麟软件有限公司 | 一种在引导阶段实现定制化功能及固定化函数地址的方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7783926B2 (en) * | 2008-01-07 | 2010-08-24 | Inventec Corporation | Method for memory testing |
CN103049257A (zh) * | 2012-12-07 | 2013-04-17 | 深圳天珑无线科技有限公司 | 一种开机显示动画的方法及电子设备 |
CN103605536A (zh) * | 2013-11-06 | 2014-02-26 | 华为技术有限公司 | 一种嵌入式操作系统的启动方法、装置及基板管理控制器 |
-
2014
- 2014-02-27 CN CN201410069024.2A patent/CN103793233B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7783926B2 (en) * | 2008-01-07 | 2010-08-24 | Inventec Corporation | Method for memory testing |
CN103049257A (zh) * | 2012-12-07 | 2013-04-17 | 深圳天珑无线科技有限公司 | 一种开机显示动画的方法及电子设备 |
CN103605536A (zh) * | 2013-11-06 | 2014-02-26 | 华为技术有限公司 | 一种嵌入式操作系统的启动方法、装置及基板管理控制器 |
Also Published As
Publication number | Publication date |
---|---|
CN103793233A (zh) | 2014-05-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103793233B (zh) | 一种基于uboot实现用户界面图形显示的方法 | |
JP5634257B2 (ja) | 電子プレゼンテーションシステムおよび方法 | |
Petzold | Microsoft XNA Framework Edition: Programming for Windows Phone 7 | |
US20060277523A1 (en) | Annotations for tracking provenance | |
CN102339291B (zh) | 一种列表生成方法及设备 | |
JP2006178955A (ja) | 電子ドキュメント内のチャートにグローバルフォーマッティングスキームを適用する方法、システムおよびコンピュータ可読媒体 | |
CN101689177A (zh) | 使用预定义布局来对图像和相关联的文本进行动态布局 | |
Blankenhorn et al. | A UML profile for GUI layout | |
TWI478043B (zh) | 行動裝置應用頁面樣版之產生系統、方法及其記錄媒體 | |
US20140164912A1 (en) | Generating system, method of interactive page templates and storage medium thereof | |
CN103150198B (zh) | 一种组态软件的显示方法 | |
US20150347097A1 (en) | Adaptive user interfaces | |
CN105931499A (zh) | 一种电子黑板系统及利用电子教学资源的方法 | |
CN105468573A (zh) | 可配置式图表应用系统 | |
TWI594196B (zh) | 電子文件製作系統及其電子文件製作方法 | |
JPH0855042A (ja) | データ処理システムをプログラミングする方法 | |
KR102613143B1 (ko) | 텍스트-비디오 생성 방법, 장치, 설비 및 매체 | |
CN104881261A (zh) | 一种合理利用显示缓冲区内存的方法及其系统 | |
US10579713B2 (en) | Application Markup language | |
CN106339215A (zh) | 一种录制Windows屏幕时实时绘制图形的方法 | |
CN102968284B (zh) | 打印机和打印处理方法 | |
CN101202035B (zh) | 一种调整屏幕的方法及用于调整屏幕的设备 | |
KR20130105509A (ko) | 전자책 제공 방법 및 장치 | |
CN116719444B (zh) | 打开文件的方法、创建项目快捷方式的方法及电子设备 | |
JPH0883172A (ja) | ソフトウェア開発支援装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20161123 Termination date: 20170227 |