doufunao

doufunao

0个粉丝

1

问答

0

专栏

0

资料

doufunao  发布于  2016-03-23 08:30:48
采纳率 0%
1个问答
8473

hi3520D-SDK4.0 UBOOT自制开机LOGO

 
请教各位师傅一个问题:我用的是hi3520d sdk-4.0版本。uboot开机logo修改在哪里?手册里说的对我这新手来说太难了,摸不到头脑
我来回答
回答26个
时间排序
认可量排序

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-03-26 09:15:51
认可0
把SDK放上来,我搞明白了告诉你,呵呵:D

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-03-26 09:16:56
认可0
SDK 4.0,啥子版本呀 我的好像还是1.0

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-03-26 09:22:52
认可0
本帖最后由 ngswfx 于 2016-3-26 09:54 编辑

这部分,厂商是不会做太大变化的.
1、首先你把 jpg的图片写入一个固定的flash位置,自己记住。
2、Uboot启动后,读取这个位置的数据到内存中。
3、解码并显示。就是设置logo环境变量,bootcmd 命令而已。开始我也搞了好久,没弄明白,通过u-boot命令行,logo也出来了,总不能每次自己输入吧,呵呵,其实没搞懂bootcmd到底是干啥的。

实际应用中,环境变量flash(默认在U-boot后面,大概128K的数据,如果修改了U-boot内核,可以调整,我的调整为U-boot占用128K,环境变量占用64K),任何时候你都别去擦除,logo图片数据你可以换图片,这样这些参数一直固定。除非整片flash升级。
这样就实现了,系统随便升级,logo随便换,但这些古怪的参数不用管。

成天到晚,按照别人的说明书过日子的程序员,郁闷呀:'(

/////////////////////////////////////logo///////////////////
sf probe 0
mw.b 0x81FE0000 ff 20000        DDR擦除128K
tftp 0x81FE0000 TV_BK_1024.jpg  //通过tftp把图片装载到DDR相应位置
sf erase 0xFE0000 20000             //flash装载图片logo的区,擦除
sf write 0x81FE0000  0xFE0000 20000      //从DDR相应位置写入128到flash

setenv jpeg_addr 0x81fe0000           //设置logo在DDR中的位置
setenv jpeg_size 0x20000                //设置logo大小
setenv vobuf          0x84fe0000             //设置解码后的数据在DDR中的位置,这3个命令是环境变量,要和下面的bootcmd保持一致。
sa

setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock4 rootfstype=jffs2 rw mtdparts=hi_sfc:128K(boot),64K(UB_ENV),64K(Config),1920K(kernel),13760K(rootfs),320K(Setting),128K(LOGO)'
setenv bootcmd 'sf probe 0;sf read 0x81000000 0x40000 0x1E0000;sf read 0x81fe0000 0xFe0000 0x20000;decjpg;setvobg 0 0x0;startvo 0 36 14;startgx 0 0x84fe0000 2048 0 0 1024 768;bootm 0x81000000'
sa

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-03-26 09:25:35
认可0
sf read 0x81fe0000 0xFe0000 0x20000;  //从flash读取128k
decjpg;setvobg 0 0x0;    //解码,并设置背景黑,解码参数是Setenv设置的
startvo 0 36 14;          //开启视频输出
startgx 0 0x84fe0000 2048 0 0 1024 768;   //内存中的解码数据显示出来

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-03-26 09:28:02
认可1
本帖最后由 ngswfx 于 2016-3-26 09:39 编辑

另外,由于开启了logo,U-boot里面其实调用了处理器的某些功能,进入系统后,图形层始终会叠加,你可以通过ko里面,把几个关键的Ko装载、卸载、再装载来 临时解决。

它的文档里面没有写,优雅的解决方法,我没找到。我遇到的现象就是,我的程序启动后,那个logo一直在。

如果在U-boot里面处理,logo就没有意义了。一闪而过,看不见。

如果在系统开启,进入根目录后操作,环境都变化了。不知道芯片开启了哪些东西,使用MPI调用肯定不行。

我能想到的方法就是来回装载KO。而且一定是先装一次,再卸载,再装载


其实就是在调用装ko前面,做如下主要的驱动装卸载,其他和logo无关的可以不管。

    insmod mmz.ko mmz=anonymous,0,0x83000000,81408K:jpeg,0,0x87f80000,512K anony=1 || report_error
    insmod hiuser.ko
    insmod hi3520D_base.ko
    insmod hi3520D_sys.ko
    insmod hi3520D_vou.ko
    insmod hi3520D_jpege.ko
    insmod hi3520D_hdmi.ko
    #remove_ko
    rmmod  hi3520D_hdmi
    rmmod  hi3520D_jpege
    rmmod  hi3520D_vou
    rmmod  hi3520D_sys
    rmmod  hi3520D_base
    rmmod  hiuser
    rmmod  mmz
  //到了这一步,Logo就消失了。
   ..........接下来正常装载需要的驱动即可。

这样就实现了logo一直显示到程序接管之前。我没测试在程序里面通过开启相应图像层,然后在MPI里面关闭相应图像层的方式来关闭LOGO。当然,也可能直接通过刷内存方式,相应的位置全部涂黑,来消灭LOGO,但图形层估计还在,程序里面用不知道会不会冲突。

ethancwchen

0个粉丝

1

问答

0

专栏

0

资料

ethancwchen 2016-04-24 18:11:22
认可0
多謝分享,Thanks

litao41010

0个粉丝

3

问答

0

专栏

0

资料

litao41010 2016-08-05 11:40:04
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=27457&ptid=10639]ngswfx 发表于 2016-3-26 09:22[/url]
这部分,厂商是不会做太大变化的.
1、首先你把 jpg的图片写入一个固定的flash位置,自己记住。
2、Uboot ...[/quote]

问一下,0x81fe000000是有效的地址吗?按照你的方法之前解码成功但是内核加不进去了,自恋给的是这种方案
1)地址空间说明
        |      1M       |      4M       |      11M      |
        |---------------|---------------|---------------|
        |     boot      |     kernel    |     rootfs    |

        以下的操作均基于图示的地址空间分配,您也可以根据实际情况进行调整。
    2)烧写u-boot
        sf probe 0
        mw.b 82000000 ff 100000
        tftp 0x82000000 u-boot-hi3520D.bin
        sf probe 0
        sf erase 0 100000
        sf write 82000000 0 100000       
        reset   
    3)烧写内核
        mw.b 82000000 ff 400000
        tftp 82000000 uImage_3520d
        sf probe 0
        sf erase 100000 400000
        sf write 82000000 100000 400000
    4)烧写文件系统
        mw.b 82000000 ff b00000
        tftp 0x82000000 rootfs_3520d_64k.jffs2
        sf erase 500000 b00000
        sf write 82000000 500000 b00000
    5)设置启动参数
        setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),4M(kernel),11M(rootfs)'
        setenv bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x400000;bootm 0x82000000'
        sa
怎样才能将两者融合?谢谢

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-08-05 11:51:54
认可0
本帖最后由 ngswfx 于 2016-8-5 11:56 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=35554&ptid=10639]litao41010 发表于 2016-8-5 11:40[/url]
问一下,0x81fe000000是有效的地址吗?按照你的方法之前解码成功但是内核加不进去了,自恋给的是这种方案 ...[/quote]

你还是没有理解。

sf read 0x81fe0000 0xFe0000 0x20000,从flash的fe0000位置,弄20000大小的数据到内存0x81fe0000。

//另外注意:setenv jpeg_addr 0x81fe0000 意思时告诉uboot,我把jpeg图片放到内存0x81fe0000了。

这些东西,你都可以随便改,对于不同的芯片有些从80000000开始,有的还从10000000开始呢。

例子上,是把所有东西都弄到82000000上了,串行处理当然没问题,但考虑到避免忘记清空,所以我把flash不同的部分放到不同的内存位置。

///////////////

sf read 0x82000000 0x100000 0x400000;bootm 0x82000000 这2句就是从flash读取内核到内存的指定位置,然后bootm就是让cpu从内存的什么位置开始继续执行。

/////////你可以修改这里,如果内核不能加载。主要是你把内核烧写到flash,0x100000位置了吗?

litao41010

0个粉丝

3

问答

0

专栏

0

资料

litao41010 2016-08-05 12:43:57
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35555&ptid=10639]ngswfx 发表于 2016-8-5 11:51[/url]
你还是没有理解。

sf read 0x81fe0000 0xFe0000 0x20000,从flash的fe0000位置,弄20000大小的数据 ...[/quote]

谢谢你的建议,我烧进去了,也进入内核了,但是现在问题时图片不能正常显示,对烧写的图片有没有要求?看到资料说修改的图像的大小,宽高和原始图像保持一致,资料说
setenv jpeg_addr 0x94000000;
setenv jpeg_size 0xb85f9;
setenv vobuf 0x94000000;
saveenv
startgx 0 0x94000000 3840 0 0 1920 1080第三个参数是行宽,需要修改吗?

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-08-05 13:04:03
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35558&ptid=10639]litao41010 发表于 2016-8-5 12:43[/url]
谢谢你的建议,我烧进去了,也进入内核了,但是现在问题时图片不能正常显示,对烧写的图片有没有要求?看 ...[/quote]

图片格式肯定有要求,就是jpg,别弄奇怪的jpg就行,多弄一些,好测试那些支持。

/////我在3520D上烧写正常的图片,到了3536上就显示不正常。

litao41010

0个粉丝

3

问答

0

专栏

0

资料

litao41010 2016-08-05 13:55:25
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35560&ptid=10639]ngswfx 发表于 2016-8-5 13:04[/url]
图片格式肯定有要求,就是jpg,别弄奇怪的jpg就行,多弄一些,好测试那些支持。

/////我在3520D上烧写 ...[/quote]

还是不能正常显示:L,我看到串口打印信息时initTag error 我看了一下原函数问题出在下图,

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-08-05 14:02:17
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35565&ptid=10639]litao41010 发表于 2016-8-5 13:55[/url]
还是不能正常显示,我看到串口打印信息时initTag error 我看了一下原函数问题出在下图,[/quote]

建议你把flash中的jpg图片,弄到内存后,再通过tftp保存成另外一个文件,看看这个文件在pc打开对不对,是不是你原来准备的jpg图像,能否打开。

//////////这样就可以确保,你中间的流程时正确的。否则你把这个内存的数据,送入LoadJpegFile肯定要出错了。
//当然,也有可能,你的文件格式,不符合要求。

litao41010

0个粉丝

3

问答

0

专栏

0

资料

litao41010 2016-08-05 15:58:09
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35567&ptid=10639]ngswfx 发表于 2016-8-5 14:02[/url]
建议你把flash中的jpg图片,弄到内存后,再通过tftp保存成另外一个文件,看看这个文件在pc打开对不对, ...[/quote]

可以显示了,估计就是JPG格式的问题,应该调整一下就可以了,十分感谢:)!但是和你说的一样就是一直叠加显示,能从程序里面去掉吗?

ngswfx

1个粉丝

55

问答

1

专栏

40

资料

ngswfx 2016-08-05 22:02:38
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35577&ptid=10639]litao41010 发表于 2016-8-5 15:58[/url]
可以显示了,估计就是JPG格式的问题,应该调整一下就可以了,十分感谢!但是和你说的一样就是一直叠加 ...[/quote]

程序里面应该可以取消掉,但我简单试了一下没搞定。所以折腾的驱动。装载了,卸载,再装载。

Cybers

0个粉丝

0

问答

0

专栏

0

资料

Cybers 2016-09-02 13:40:16
认可0
学习了,谢谢!

hundajdx

0个粉丝

0

问答

0

专栏

0

资料

hundajdx 2016-12-01 19:33:53
认可0
谢谢了,学习!!!

Benz

0个粉丝

29

问答

0

专栏

0

资料

Benz 2017-01-15 12:13:47
认可0
学习了谢谢

Benz

0个粉丝

29

问答

0

专栏

0

资料

Benz 2017-01-15 14:19:18
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=27457&ptid=10639]ngswfx 发表于 2016-3-26 09:22[/url]
这部分,厂商是不会做太大变化的.
1、首先你把 jpg的图片写入一个固定的flash位置,自己记住。
2、Uboot ...[/quote]

你好,看了你的设置。 我用的是3518a的板子,在设置setenv bootcmd 的时候,显示 ”  ** Too many args (max. 16) **  ”。 而且 uboot环境下 不支持解码命令...  。有点困惑

linux_3520D

0个粉丝

2

问答

0

专栏

0

资料

linux_3520D 2017-08-22 11:18:59
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=27459&ptid=10639]ngswfx 发表于 2016-3-26 09:28[/url]
另外,由于开启了logo,U-boot里面其实调用了处理器的某些功能,进入系统后,图形层始终会叠加,你可以通过 ...[/quote]

完美好解决了我的问题

17097339061

0个粉丝

58

问答

0

专栏

1

资料

17097339061 2017-10-18 19:54:44
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35555&ptid=10639]ngswfx 发表于 2016-8-5 11:51[/url]
你还是没有理解。

sf read 0x81fe0000 0xFe0000 0x20000,从flash的fe0000位置,弄20000大小的数据 ...[/quote]

楼主怎么解决的
加载中···
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区