u-boot移植随笔:自定义u-boot命令点灯
2010-11-10 13:15
260 查看
u-boot移植随笔:自定义u-boot命令点灯
前几天一不小心在CSDN论坛上发帖散分,同时许诺完成点灯就结账,经过努力,终于可以在u-boot的shell中输入自定义的命令来点灯了。下面简单讲一下,但不想深入讲解原理。
网上很多教程都是在start.s中使用汇编来点灯,这种方法是可以的。但boss说这样不好,因为这是直接操作寄存器的。而网上很多资料都说要注释掉coloured_LED_init和red_LED_on这两个函数。而我偏偏想用这两个函数来实现点灯。——毕竟人家原来就有了的。在研究这个方法的同时,也了解了weak链接,学到一点东西,但自己实现起来,却又不可以!无论怎么捣鼓,那几个灯就是不按自己程序中写的那样点亮!后来实在没招了,只好使出绝招了。
那就是:自定义u-boot命令来点灯!同时学习一下如何添加自定义的命令。
u-boot中已经有了2440的GPIO结构体——s3c24x0_gpio,也有“宏函数”获取IO结构体的地址——s3c24x0_get_base_gpio(),一切只等我拿来使用了。本来想在common目录下建立一个cmd_led.c文件的,但这样可能不太好,后来就直接在smdk2440.c里面定义led函数,在定义s3c24x0_get_base_gpio函数的头文件所在的目录新建s3c2440.h头文件,声明led函数。这样虽然不太好,但目前只是作为测试,亦无妨了。
有了自定义的函数,再填充U_BOOT_CMD宏就可以了。这个宏有6个部分,分别是u-boot shell中的命令(就是我们敲的命令,如flinfo等等)、最大参数,重复次数(?)、命令实现函数、使用方法、帮助。命令实现函数形式为
int do_foo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
至于为什么这样,看U_BOOT_CMD就清楚了。
点灯程序参考了以前写的LED驱动程序,顺序测试没有任何问题,但测试多几次,却发现有严重的bug!比如让四个灯从1到4顺序点亮,没有问题,但先点4就出现问题了,灭灯同样也存在这样的问题,修改了很久,也没有解决,初步估计是移位造成的。——这些问题先留着,以后能解决就解决,万一哪一天我功力大增,一下子就解决了呢?
这里介绍一下移植u-boot的背景吧。
u-boot版本是2010.09,因为现在上官方ftp,最新稳定版本就是这个。开发板芯片是S3C2440,很早就买了,上面的NOR Flash原来是2MB的,现在换成了8MB(听说NOR flash很贵),封装是一样的。打算在上面移植u-boot、内核、根文件系统,NAND暂时不考虑。
换flash后,用H-JTAG也可以下载,但要修改配置文件,将其中的芯片型号修改为使用的那个,寄存器赋值可以参考2410的配置文件,下载工具和配置文件可以在H-JTAG官网论坛上找到。
这次移植,除了正常的移植之外,还打算深入研究一下u-boot的代码,以及这过程中涉及到的知识——比如研究.lds文件、生成的.map文件、内存分布、链接以及代码技巧及组织。。。。都对自己水平的提高有很大帮助。当作一个初出茅庐的人来说,不断学习是一件始终要坚持的事情。
昨天完成点灯、网络芯片程序修改,同时意识到版本控制的重要性,今天主要研究版本控制SVN的用法。
前几天一不小心在CSDN论坛上发帖散分,同时许诺完成点灯就结账,经过努力,终于可以在u-boot的shell中输入自定义的命令来点灯了。下面简单讲一下,但不想深入讲解原理。
网上很多教程都是在start.s中使用汇编来点灯,这种方法是可以的。但boss说这样不好,因为这是直接操作寄存器的。而网上很多资料都说要注释掉coloured_LED_init和red_LED_on这两个函数。而我偏偏想用这两个函数来实现点灯。——毕竟人家原来就有了的。在研究这个方法的同时,也了解了weak链接,学到一点东西,但自己实现起来,却又不可以!无论怎么捣鼓,那几个灯就是不按自己程序中写的那样点亮!后来实在没招了,只好使出绝招了。
那就是:自定义u-boot命令来点灯!同时学习一下如何添加自定义的命令。
u-boot中已经有了2440的GPIO结构体——s3c24x0_gpio,也有“宏函数”获取IO结构体的地址——s3c24x0_get_base_gpio(),一切只等我拿来使用了。本来想在common目录下建立一个cmd_led.c文件的,但这样可能不太好,后来就直接在smdk2440.c里面定义led函数,在定义s3c24x0_get_base_gpio函数的头文件所在的目录新建s3c2440.h头文件,声明led函数。这样虽然不太好,但目前只是作为测试,亦无妨了。
有了自定义的函数,再填充U_BOOT_CMD宏就可以了。这个宏有6个部分,分别是u-boot shell中的命令(就是我们敲的命令,如flinfo等等)、最大参数,重复次数(?)、命令实现函数、使用方法、帮助。命令实现函数形式为
int do_foo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
至于为什么这样,看U_BOOT_CMD就清楚了。
点灯程序参考了以前写的LED驱动程序,顺序测试没有任何问题,但测试多几次,却发现有严重的bug!比如让四个灯从1到4顺序点亮,没有问题,但先点4就出现问题了,灭灯同样也存在这样的问题,修改了很久,也没有解决,初步估计是移位造成的。——这些问题先留着,以后能解决就解决,万一哪一天我功力大增,一下子就解决了呢?
这里介绍一下移植u-boot的背景吧。
u-boot版本是2010.09,因为现在上官方ftp,最新稳定版本就是这个。开发板芯片是S3C2440,很早就买了,上面的NOR Flash原来是2MB的,现在换成了8MB(听说NOR flash很贵),封装是一样的。打算在上面移植u-boot、内核、根文件系统,NAND暂时不考虑。
换flash后,用H-JTAG也可以下载,但要修改配置文件,将其中的芯片型号修改为使用的那个,寄存器赋值可以参考2410的配置文件,下载工具和配置文件可以在H-JTAG官网论坛上找到。
这次移植,除了正常的移植之外,还打算深入研究一下u-boot的代码,以及这过程中涉及到的知识——比如研究.lds文件、生成的.map文件、内存分布、链接以及代码技巧及组织。。。。都对自己水平的提高有很大帮助。当作一个初出茅庐的人来说,不断学习是一件始终要坚持的事情。
昨天完成点灯、网络芯片程序修改,同时意识到版本控制的重要性,今天主要研究版本控制SVN的用法。
相关文章推荐
- u-boot移植随笔:让u-boot shell支持tab、命令历史
- Exynos4412 Uboot 移植(三)—— Uboot添加自定义命令
- Exynos4412 Uboot 移植(三)—— Uboot添加自定义命令
- Exynos4412 Uboot 移植(三)—— Uboot添加自定义命令
- u-boot移植随笔:System.map文件格式
- U-boot移植日志(7)--使u-boot的help命令支持通配符(*)
- tiny210(s5pv210)移植u-boot(基于 2014.4 版本)——命令补全和历史命令
- u-boot移植随笔:解决引导内核遇到undefined instruction的错误
- u-boot移植随笔:使用svn进行版本控制
- u-boot移植随笔:一些内存地址的再次研究(二维数组及指针数组)
- 第二十章、 Tiny4412 U-BOOT移植二十 增加cleanlcd命令
- uboot移植之uboot命令体系解析
- u-boot移植随笔:u-boot2010.09移植到8MB Nor Flash的S3C2440,第一步搞定(补记)
- U-boot分析与移植(4)-U-boot 添加命令
- 第二十章、 Tiny4412 U-BOOT移植二十 增加cleanlcd命令
- 在UBOOT中添加自定义命令
- u-boot移植随笔:u-boot shell与ASCII码
- u-boot移植随笔:移植过程问题及解决(本文章不时更新)
- 如何向PPC-Boot中添加自定义命令
- U-boot分析与移植(4)----U-boot 添加命令