第二十章、 Tiny4412 U-BOOT移植二十 增加cleanlcd命令

u-boot 裁剪分析 评估结论: 通过下面内容的分析,u-boot.Bin在支持本公司A项目所必须的功能后,将无法保证缩减到128KB的情况下且保证能够正常启动。 u-boot使用版本说明: u-boot用于评估的版本为合作公司发布的第一个u-boot版本,目录结构位于bootable\bootloader\uboot\Y1810下,编译的配置文件为comip_Y1810_config. 编译出来的u 阅读详情

这一章学习增加一个命令,那么增加一个什么命令呢?大家可能也会看到LCD上显示的字符由于没有换行和对齐,显示一会后,字符就相互重叠了,好吧,就增加一个清楚LCD显示的命令,当然我也希望他能设置颜色了。

一、命令格式说明

关于如何命令的说明网上有好多资料,我这里仅仅简单的说明一下:

U-Boot的每一个命令都是通过U_Boot_CMD宏定义的。这个宏在<include/command.h>头文件中定义。如下所示:

#ifdef CFG_LONGHELP

#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \

cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep,cmd, usage, help}

#else    / no long help info*/

 

#define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \

cmd_tbl_t __u_boot_cmd_##name Struct_Section = {#name, maxargs, rep,cmd, usage}

#endif    / CFG_LONGHELP */

 

每一个命令定义一个cmd_tbl_t结构体,而cmd_tbl_t只不过是cmd_tbl_s的一个typedef,如下所示:

typedef struct cmd_tbl_s cmd_tbl_t;

 

而cmd_tbl_s的定义则在同一文件<command.h>下,如下所示:

 

struct cmd_tbl_s {

    char       *name;        / Command Name  */

    int        maxargs;       /maximum number of arguments */

    int        repeatable;    / autorepeat allowed?   */

                    /Implementation function  */

    int        (*cmd)(struct cmd_tbl_s *, int, int,char *[]);

    char       *usage;        / Usage message    (short) */

#ifdef    CFG_LONGHELP

    char       *help;        / Help message    (long) */

#endif

 

#ifdef CONFIG_AUTO_COMPLETE

    / do auto completion onthe arguments */

    Int  (*complete)(int argc, char *argv[], charlast_char, nt maxv, char *cmdv[]);

#endif

};

 

简单说明一下U_BOOT_CMD,或者可以说cmd_tbl_s结构体中每个变量的意思:

1、name:命令的名字,注意,他不是一个字符串(不要用号括起来)。

2、maxargs:最大的参数个数。

2、repeatable:命令是否可以重复,可重复是指运行一个命令后,下次敲回车即可再次运行。

4、cmd:参应的函数指针,类型为(*cmd)(strunt cmd_tbl_s *, int,int,char *[])。

5、usage:简短的使用说明,这是个字符串

6、help:较详细的使用说明,这也是一个字符串。

 

这样每一个U-Boot命令有一个结构体来描述。结构体包含的成员变量:命令名称、最大参数个数、重复数、命令执行函数、用法、帮助。

从控制台输入的命令是由common/command.c中的程序解释执行的。find_cmd()负责匹配输入的命令,从列表中找出对应的命令结构体并返回指向这一结构体的指针。

基于U-Boot命令的基本框架,下面来简单的说明如何增加Cleanlcd操作命令.

二、增加cleanlcd命令

1、定义cleanlcd命令

在<config_cmd_all.h>与<config_cmd_default.h>中定义了所有UBOOT支持的命令的标志位。下面我们只在config_cmd_all.h中增加一行命令定义:

#define CONFIG_CMD_CLEANLCD /*add by zth*/

 

其中,<config_cmd_default.h>中定义的命令是由板子默认支持的,这是由于在板子的配置文件中包含进了该头文件,如果让板子支持<config_cmd_default.h>中没有,而<config_cmd_all.h>中命令,还必须在板子的配置文件中进行相关的定义,所以我没有在<config_cmd_default.h>中定义cleanlcd命令,就必须在我的</configs/zthtiny4412.h>中支持cleanlcd命令,所以打开zthtiny4412.h,增加以下命令:

#define CONFIG_CMD_CLEANLCD /*add by zth*/

当然,也可以直接把这句定义语句写在<config_cmd_default.h>中。

2、增加cmd_cleanlcd.c文件

内容如下:

/*

add by zth

this command use to clean the LcD

*/

#include <common.h>

#include <command.h>

#include <lcd.h>

#include <config.h>

#include <malloc.h>

#include <zth_tiny4412_lcd.h>

 

#if defined(CONFIG_CMD_CLEANLCD)

static int do_clean_lcd(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])

{

 

         unsigned intcolour_value;

         if (argc < 2)

         {

                   printf("Yourcommand not right! Please chcek help; \n");

                 return -1;

         }

 

         colour_value =simple_strtoul(argv[1], NULL, 16);

         colour_value=colour_value & 0xFFFFFF;

         //printf("colour_value=%s\n",argv[1]);

         //printf("colour_value=%x\n",colour_value);

          memset_int(LCD_VIDEO_ADDR, colour_value,VIDEO_MEM_SIZE);

          

          return 0;

}

 

U_BOOT_CMD(

         cleanlcd,  5,      1,      do_clean_lcd,

         "this just use toclean the lcd with a colour",

         "add by zth \n"

         "commandformat:\n"

         "cleanlcdcolour_value\n "

         "colour_value youcan use an 24bit value\n"

);

 

#endif

 

文件中有这第一行代码:

memset_int(LCD_VIDEO_ADDR, colour_value,VIDEO_MEM_SIZE);

为什么我没有用memset()函数呢?

是由于我调试时发现程序每次调用的是

void * memset(void * s,char c,size_t count)

而不是:

void * memset(void * s,int c,size_t count)

这样和话LCD显示结果不是我们想要的,为了解决这个问题,那我直接用了以前写的裸机程序中的memset_int,这里我们要把这个函数给定义好,其实我们代码中早已写好了,只是被注释了,下面反这两行代码给定义出来。

3、修改zth_tiny4412_lcd.h和zth_tiny4412_lcd.c和文件

打开zth_tiny4412_lcd.h,定位到24行左右:去掉注释,修改为:

extern void memset_int(unsigned int * s, int c,unsigned int count);

 

打开zth_tiny4412_lcd.c,定位到46行左右:去掉注释,修改为

void memset_int(unsigned int * s, int c,unsigned int count)

{

         unsigned int *xs =(unsigned int *) s;

         while (count--)

                   *xs++ = c;

         //return s;

}

接着定位到262行左右,修改为:

memset_int((void *)pGD->frameAdrs, 0xFF00, pGD->memSize);

 

4、修改/common/makefile

打开/common/makefile,定位到83行左右,增加:

COBJS-$(CONFIG_CMD_CLEANLCD) +=cmd_cleanlcd.o

通过上面4步后,可以进行编译烧写运行了,下面命令提供参考:

cp -R /media/sf_share/u-boot_zth .

chmod 777 -R u-boot_zth /

cd u-boot_zth

make distclean

make zthtiny4412_config

make

cd sd_fuse/

make

cd zthtiny4412/

./sd_fusing.sh /dev/sdb

运行后,在串口调试终端输入:help命令,可以找到新增加的cleanlcd命令,如下图所示:

图20-1、新增加的命令运行效果图


利用cleanlcd命令,显示一个颜色,例如命令:cleanlcd0x995500,运行效果如下图所示:

图20-2 、命令运行LCD效果图


Exynos4412 Uboot 移植(四)—— Uboot引导内核过程分析 bootloader 要想启动内核,可以直接跳到内核的第一个指令处,即内核的起始地址,这样便可以完成内核的启动工作了。但是要想启动内核还需要满足一些条件,如下所示: 1、cpu 寄存器设置     * R0 = 0     * R1 = 机器类型 id     * R2 = 启动参数在内存中的起始地址 2、cpu 模式     * 禁止所有中断     * 必须为SVC(超级用户 阅读详情

相关推荐

tiny210的uboot增加LCD驱动

Tiny210 uboot 增加LCD显示功能

dm9000网卡,uboot代码分析

uboot移植(九)移植网卡DM9000 LouisGou 2018-06-09 20:37:04 786 收藏 2 分类专栏: uboot 文章标签: uboot 版权 一、原理 TQ210 板载的网卡芯片是 DM9000A,接在 S5PV210 的 SROM 控制器的 BANK1 上。 S5PV210 的 SROM 控制器支持 8/16 位 NOR Flash/PROM/SRAM 内存。 分为 6 个 bank,每个 bank 寻 址空间达 128MB。 每个 bank 有一个

一口Linux的专栏 712

MATLAB/Simulink与ThingSpeak集成:打通物联网数据与工业算法仿真的闭环

在工业算法开发与控制系统设计中,模型仿真与真实世界数据的脱节是常见的工程挑战。其核心原理在于构建一个双向数据流闭环,将虚拟的仿真模型与物理世界的传感器网络连接起来。这一技术方案的核心价值在于大幅缩短算法迭代周期,实现数据驱动的设计与验证。典型的应用场景包括数字孪生构建、预测性维护和硬件在环(HIL)测试的云端化。通过将MATLAB/Simulink这一强大的模型化设计环境,与ThingSpeak物联网云平台进行深度集成,工程师能够轻松地将实时或历史的物联网数据流直接注入仿真模型作为输入,同时将仿真结果实时回

weixin_34220179的博客 470

较高版本的U-BOOT中添加命令

  在U-Boot中,添加属于自己的命令。不同的U-Boot版本,对命令的处理有不同机制。这里大概分为两种机制,一种,是U-Boot1.1.6向前的版本。另一种是U-Boot1.1.6向后的版本,就是题目中的“较高版本”。(这里只是个人大致分法,我没有确切查实)。        第一种,我也是根据网上的信息,自己稍为总结了一下。如下:       U-Boot的每一个命令都是通过U_Boot_

daoweifan的专栏 2409

IKM 测试题 - Java SE 8 评估测试题目

IKM 测试题 - Java SE 8 评估测试题目

licheng11y的博客 1315

详细介绍pytorch重要的API

Tensor 是 PyTorch 中最基本的数据结构,提供了多种创建和操作张量的函数。Autograd 提供了自动求导功能,可以跟踪 Tensor 上的操作并计算梯度。损失函数用于衡量模型预测值与真实值之间的差异,提供了多种损失函数。是构建神经网络的基础类,提供了定义网络层和前向传播的方法。提供了 GPU 计算的支持,包括设备管理、内存管理等。提供了一些常用的函数式操作,如激活函数、损失函数等。提供了常用的数据集、模型架构和图像转换工具。提供了数据加载和预处理的工具,包括。

hello! 1223

uboot命令添加过程

U-Boot的命令为用户提供了交互功能,并且已经实现了几十个常用的命令。如果开发板需要很特殊的操作,可以添加新的U-Boot命令。     U-Boot的每一个命令都是通过U_Boot_CMD宏定义的。这个宏在头文件中定义 #ifdef CFG_LONGHELP #define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help)

ltt305210390的专栏 768

神经网络:初学者指南(专业版)

神经网络是一种受生物大脑启发的计算模型,由多层互连的人工神经元组成。本文从生物神经元结构出发,介绍了感知器模型、激活函数、网络架构(输入/隐藏/输出层)等基础概念,并详细阐述了前向传播、反向传播、损失函数和优化器等核心训练机制。同时涵盖了CNN、RNN等常见架构,以及过拟合、梯度消失等关键挑战,最后概述了神经网络在计算机视觉、NLP等领域的广泛应用。全文系统性地梳理了神经网络的基础理论和实践要点,为初学者提供了清晰的学习路径。

weixin_42107409的博客 1785

uboot的配置文件介绍

u-boot 支持很多开发板, 而开发板外设不同, 所以给每个开发板都会有一个自己的配置头文件, 这个文件是 include\configs\板名.h,u-boot 中使用到所有宏定义都应该在定义在这个文件中, 这个文件有两类宏定义, 一种 CFG_开头, 一种是 CONFIG_开头的。 CONFIG_开头的宏一般使用来定义芯片级的功能, CFG_开头的宏一般 是用来定义板级功能。头文件中定义的宏...

仗劍走天涯 5039

VN5620硬件接口介绍

VECTOR, VN5620, 诊断

Fecostar的博客 7486

Hi3516CV610开发板实战:从零搭建智能视觉监控系统

本文详细介绍了从零开始基于Hi3516CV610开发板搭建智能视觉监控系统的完整实战流程。涵盖硬件连接、系统配置、摄像头集成、网络设置、固件烧录到视频处理与智能分析功能开发,提供了丰富的实践经验和调试技巧,帮助开发者快速掌握嵌入式视觉系统开发。

vvv99的博客 564

U-boot 添加命令 U_BOOT_CMD(修正版本)以全志a33平台为例子

http://www.xuebuyuan.com/2197753.html http://blog.chinaunix.net/uid-20665047-id-3485444.html U-boot 添加命令 U_BOOT_CMD(修正版本) 以全志a33平台为例子 2013-02-01 16:51:49 分类: LINUX U-boot 添加命令 U_BOOT_CMD

南岭笑笑生之家 3477

UCOS-III 系统移植

UCOSIII系统移植到GD32F303详细过程 工程代码:https://github.com/jslaobing/techIot_ucosiii_porting

TechIoT - 探索物联网与嵌入式系统 2087

第二十章、 Tiny4412 U-BOOT移植二十 增加cleanlcd命令

齐,显示一会后,字符就相互重叠了,好吧,就增加一个清楚LCD显示的命令,当然我也希望他能设置颜色了。一、命令格式说明关于如何命令的说明网上有好多资料,我这里仅仅简单的说明一下:U-Boot的每一个命令都是通过U_Boot_CMD宏定义的。这个宏在&lt;include/command.h&gt;头文件中定义。如下所示:#ifdef CFG_LONGHELP#define U_BOOT_CMD(na...

zjy900507的博客 225

光芯片Photodiode 原理,设计与版图

但是光电二极管相对较大,因为需要接收足够的入射光线,此外,光电二极管的厚度比较小,通常位于 1 um 以下(为了波导模式更好地在波导中传输,减少损耗)。从下图中可以看出,当反偏时,即有光在耗尽层被吸收被转换为电流信号时,增加反向偏压几乎不影响反向电流,因此,对于光电二极管来说,反向电压并不影响反向电流的大小。不施加外部电压(开路状态),光生电压直接输出,流出的电流受到抑制,在两端积累一定的电位差,类似太阳能电池,具体特点是噪声低,但响应速度慢。因此,需要尽可能的减少暗电流,以增加元件对光的灵敏度。

u011699626的博客 981

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

U-boot分析与移植(4)----U-boot 添加命令

我们初步了解U-Boot执行流程后,知道 U-Boot的每一个命令都是通过U_BOOT_CMD宏定义的。这个宏在include/command.h头文件中定义,每一个命令定义一个cmd_tbl_t结构体。 /*命令宏U_BOOT_CMD*/ #define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) \ cmd_tbl_t __u_

http://lotte-bai.github.io/ 2836

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Uboot中的命令实现(一)命令的声明

最近看了一款STM32设计的模块,其通过串口实现的命令解释器十分灵活好用,因此也想借鉴移植一个命令解释器到自己的设备中,进而想到了UBOOT中的命令实现,准备跟踪U-BOOT里的命令解释器,并将其移植到STM单片机中,作为一个通用模板来使用。别的不说了,RTFSC (Read the fucking source code )! uboot中的命令解释函数在command.c 和command....

weixin_38869282的博客 624

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

第十九章、TIny4412 U-BOOT移植十九 LCD移植

这一篇主要参考博文: http://5istt.com/cookies/blog/?post=122 《s5pv-u-boot-2011.06之增加LCD显示功能.PDF》的文档   其实我一直就只想学一点东西,当时心太大了,就直接买了Tiny4412,才发现这是一块硬骨头,网上资料少的可怜,FriendlyARM给的资料基本就是代码,说明性、讲原理的东西也没有。看了好久才发现其给的U-B

eshing的专栏 5989

uboot移植(十七)实现 LCD 显示

arch/arm/lib/board.c 中的 board_init_f 函数 如果定义了 CONFIG_LCD,就会调用了 lcd_setmem 函数,这个函数用来分配帧缓存地址, 其定义在common/lcd.c         这个函数调用了 panel_info 变量,这个变量在每个具体的 lcd 驱动中定义,定义了具体 LCD 的相关信息,比如这里通过 debug 打印了它的成员变量:...

跬步千里,窥叶知秋 1万+

[tiny4412]u-boot启动后 测试LCD_S700

环境:基于u-boot 硬件:tiny4412 LCD:S700 先看41章,Display Controller 再看S700的时序: 可以看到,LCD的VSYNC和HSYNC的同步信号都是低电平有效,配置时候需要翻转电平。 主要配置的信息有:DCLK = 33MHz HS pulse width 20 HS Blanking...

qq543716996的博客 294

Linux内核移植 part2:uboot lcd驱动

人们手里的金钱是保持自由的一种工具。 —— 卢梭 对于卢梭的这句话,不能同意更多啊。这次驱动一块显示屏,历时两天时间,也许是感到倦了,这篇移植文档就当终结吧。关于Linux下的framebuffer驱动就不移植了,在已有的框架下,把配置好的参数添加进去即可。一 硬件介绍显示屏为tsc2007,带电阻式触摸。平台依旧是Exynos4412。废话不多说,直接来看怎么驱动吧。二 设备树配置我的设备树文件是

叶玄青的博客 3615

第十五、十六、十七、十八章、TIny4412 U-BOOT移植 LCD原理分析一、二、三、四

首先说明一点,以后几篇关于LCD的原理分析,均来自于网络上这一篇博文,其内容可以说是完全复制于此,这里复制下来,是留个备份给自己学习,这里整理在一起也是方便大家学习。 以下内容转自: http://blog.youkuaiyun.com/xubin341719/article/details/9125583

eshing的专栏 2601

如何在U-Boot中添加自定义命令

如何在U-Boot中添加自定义命令 1、U-boot命令机制 U-boot中每个命令都使用一个struct cmd_tbl_t定义,该定义在include/commands.h中实现。 要添加一个新命令,要在源码common目录下添加对应的c文件,并且加到Makefile。 命令实现模板如下 #include &lt;common.h&gt; #i...

HowieXue 薛永浩的博客 1691

u-boot中setexpr命令的使用

[u-boot: v2012.10] [Author: Bo Shen ] CONFIG_CMD_SETEXPR被include/config_cmd_all.h包含,所以在板子相关的配置文件中加上#define CONFIG_CMD_SETEXPR, setexpr命令就会被加入进来 1. setexpr命令帮助信息 -------------------------

voice_shen的专栏 3235

第一章、Tiny4412 U-BOOT移植一 说明

第一章、4412 U-BOOT移植一 说明 一、移植前说明: 1、  特别声明:此文档是我的学习文档,里面肯定有错误地方,仅供参考! 2、移植平台:友善之臂Tiny4412SDK1306平台。 3、移植系统:Ubuntu12.04 4、移植原始CODE:平台光盘中由Samsung提供的U-Boot-samsung-dev.tar.bz2。为什么用这个,只能说因为我也菜鸟,我找了u-boo

eshing的专栏 8078
上一篇: 第十九章、TIny4412 U-BOOT移植十九 LCD移植
eshing
博客等级 码龄18年 146粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值