电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区
论坛
综合技术专区
soc fpga开发日记之:曲折中的快乐
soc fpga开发日记之:曲折中的快乐
coyoo
LV4工程师
| 2014-05-20 13:46:34
浏览量 892
回复:9
发表新帖
因为前一个项目一直还在忙,soc fpga学习和开发时断时续,整个硬件平台的设计还是见缝插针的做出来的,上周末在出差时知道已经贴装好了,就等着调试。
周日开始调试,虽然磕磕碰碰,也算顺利,遇到一些开发软件工具上的问题,自己动手修改了,山不转水转,都通过去了。一开始运行调试debug-host.ds就有问题,ds-5调试界面中的command中可以手工输入命令,熟悉了一阵就可以继续调试,没有阻挡住前进的步伐,同时对.ds调试脚本有了深入的理解,特别是理解了如何利用u-boot-spl.axf这个生成的preloader程序去调试裸程序,脚本巧妙的设置断点在spl_boot_device,然后不再继续,而是fileload装载裸程序执行,这个方法好啊,一石二鸟,用不着为裸程序和linux引导准备两套程序。
有了昨天的工作,居然帮了今天的大忙,我有特爱好,只要能看到代码,只要能进入调试状态,就有百分的信心,比起那种琢磨电路工作状态或时序当前工作状态的硬件活要快乐的多。昨天调试时停留的程序如下:
boot_device = spl_boot_device();
debug("boot device - %dn", boot_device);
switch (boot_device) {
#ifdef CONFIG_SPL_RAM_DEVICE
case BOOT_DEVICE_RAM:
spl_ram_load_image();
break;
#endif
#ifdef CONFIG_SPL_MMC_SUPPORT
case BOOT_DEVICE_MMC1:
case BOOT_DEVICE_MMC2:
case BOOT_DEVICE_MMC2_2:
spl_mmc_load_image();
break;
#endif
#ifdef CONFIG_SPL_NAND_SUPPORT
case BOOT_DEVICE_NAND:
spl_nand_load_image();
break;
#endif
#ifdef CONFIG_SPL_NOR_SUPPORT
case BOOT_DEVICE_NOR:
spl_nor_load_image();
break;
#endif
#ifdef CONFIG_SPL_YMODEM_SUPPORT
case BOOT_DEVICE_UART:
spl_ymodem_load_image();
break;
#endif
#ifdef CONFIG_SPL_SPI_SUPPORT
case BOOT_DEVICE_SPI:
spl_spi_load_image();
break;
#endif
#ifdef CONFIG_SPL_ETH_SUPPORT
case BOOT_DEVICE_CPGMAC:
#ifdef CONFIG_SPL_ETH_DEVICE
spl_net_load_image(CONFIG_SPL_ETH_DEVICE);
#else
spl_net_load_image(NULL);
#endif
break;
#endif
default:
debug("SPL: Un-supported Boot Devicen");
hang();
}
看到这些代码,很开心啊,原来下一步工作就是引导系统了,虽然昨天调试裸程序的时候是打断这个流程的。今天制作好linux sd卡,没有更新preloader部分,先上电试了一把,没有令人惊喜的意外,系统没启动。于是想到昨天的代码,何不先不修改sd内容,在调试状态下去引导sd卡中的linux系统呢? OK,注意很不错,实施吧。
还是象昨天一样设置断点,运行到spl_boot_device,单步调试了几行,快乐来了,居然发现沉默的串口界面有了输出,一闪而过的直觉告诉我,应该能成了!! 干脆不调试,直接运行吧,结果是愉快的,linux系统引导了,进入了登陆界面,做系统开发的快乐就在这个时刻:青山着意化为桥,红雨随心翻做浪。
做系统设计需要随时知道自己的工作状态,进展到什么程度了?下一步做什么,这些就需要根据当前系统的现象做准确的判断,linux系统顺利引导证明的东西多了:1、fpga hps系统正常 2、sd卡接口、sd卡内容正常 3、串口电路部分正常。 太好了,良好的开端是成功的一半,记得上次在调试HELIO板的时候,网线一插,串口系统控制台上就会提示,我能这么幸运么? 插山网线,如期而遇的正确提示来了!!
马上设置网络地址:ifconfig eth0 192.168.1.10
接着:ping 192.168.1.1
ok,网络通了!
linux系统的小环境成了。呵呵,中午确实应该犒赏一下自己了。
后记,用这个方法引导起来后,还可以随时进入linux系统调试状态,加载必要的符号和源代码目录应该是个完备的内核调试环境。
因为前一个项目一直还在忙,soc fpga学习和开发时断时续,整个硬件平台的设计还是见缝插针的做出来的,上周末在出差时知道已经贴装好了,就等着调试。
周日开始调试,虽然磕磕碰碰,也算顺利,遇到一些开发软件工具上的问题,自己动手修改了,山不转水转,都通过去了。一开始运行调试debug-host.ds就有问题,ds-5调试界面中的command中可以手工输入命令,熟悉了一阵就可以继续调试,没有阻挡住前进的步伐,同时对.ds调试脚本有了深入的理解,特别是理解了如何利用u-boot-spl.axf这个生成的preloader程序去调试裸程序,脚本巧妙的设置断点在spl_boot_device,然后不再继续,而是fileload装载裸程序执行,这个方法好啊,一石二鸟,用不着为裸程序和linux引导准备两套程序。
有了昨天的工作,居然帮了今天的大忙,我有特爱好,只要能看到代码,只要能进入调试状态,就有百分的信心,比起那种琢磨电路工作状态或时序当前工作状态的硬件活要快乐的多。昨天调试时停留的程序如下:
boot_device = spl_boot_device();
debug("boot device - %dn", boot_device);
switch (boot_device) {
#ifdef CONFIG_SPL_RAM_DEVICE
case BOOT_DEVICE_RAM:
spl_ram_load_image();
break;
#endif
#ifdef CONFIG_SPL_MMC_SUPPORT
case BOOT_DEVICE_MMC1:
case BOOT_DEVICE_MMC2:
case BOOT_DEVICE_MMC2_2:
spl_mmc_load_image();
break;
#endif
#ifdef CONFIG_SPL_NAND_SUPPORT
case BOOT_DEVICE_NAND:
spl_nand_load_image();
break;
#endif
#ifdef CONFIG_SPL_NOR_SUPPORT
case BOOT_DEVICE_NOR:
spl_nor_load_image();
break;
#endif
#ifdef CONFIG_SPL_YMODEM_SUPPORT
case BOOT_DEVICE_UART:
spl_ymodem_load_image();
break;
#endif
#ifdef CONFIG_SPL_SPI_SUPPORT
case BOOT_DEVICE_SPI:
spl_spi_load_image();
break;
#endif
#ifdef CONFIG_SPL_ETH_SUPPORT
case BOOT_DEVICE_CPGMAC:
#ifdef CONFIG_SPL_ETH_DEVICE
spl_net_load_image(CONFIG_SPL_ETH_DEVICE);
#else
spl_net_load_image(NULL);
#endif
break;
#endif
default:
debug("SPL: Un-supported Boot Devicen");
hang();
}
看到这些代码,很开心啊,原来下一步工作就是引导系统了,虽然昨天调试裸程序的时候是打断这个流程的。今天制作好linux sd卡,没有更新preloader部分,先上电试了一把,没有令人惊喜的意外,系统没启动。于是想到昨天的代码,何不先不修改sd内容,在调试状态下去引导sd卡中的linux系统呢? OK,注意很不错,实施吧。
还是象昨天一样设置断点,运行到spl_boot_device,单步调试了几行,快乐来了,居然发现沉默的串口界面有了输出,一闪而过的直觉告诉我,应该能成了!! 干脆不调试,直接运行吧,结果是愉快的,linux系统引导了,进入了登陆界面,做系统开发的快乐就在这个时刻:青山着意化为桥,红雨随心翻做浪。
做系统设计需要随时知道自己的工作状态,进展到什么程度了?下一步做什么,这些就需要根据当前系统的现象做准确的判断,linux系统顺利引导证明的东西多了:1、fpga hps系统正常 2、sd卡接口、sd卡内容正常 3、串口电路部分正常。 太好了,良好的开端是成功的一半,记得上次在调试HELIO板的时候,网线一插,串口系统控制台上就会提示,我能这么幸运么? 插山网线,如期而遇的正确提示来了!!
马上设置网络地址:ifconfig eth0 192.168.1.10
接着:ping 192.168.1.1
ok,网络通了!
linux系统的小环境成了。呵呵,中午确实应该犒赏一下自己了。
后记,用这个方法引导起来后,还可以随时进入linux系统调试状态,加载必要的符号和源代码目录应该是个完备的内核调试环境。
0
收藏
举报
分享
×
微信分享
扫描二维码分享
qq分享
QQ空间分享
微博分享
我来回复
登录后可评论,请
登录
或
注册
所有回答
数量:
10
mingming
2014-09-24
顶起,,,
0
回复
举报
发布
coyoo
2014-05-26
0
回复
举报
发布
lilei
2014-05-26
顶起。。。
0
回复
举报
发布
雪狼
2014-05-23
确实不错~~
0
回复
举报
发布
coyoo
2014-05-23
0
回复
举报
发布
wengqiang
2014-05-23
很好啊
0
回复
举报
发布
coyoo
2014-05-20
0
回复
举报
发布
冰山一角
2014-05-20
顶起。。。
0
回复
举报
发布
coyoo
2014-05-20
不是,别人做的项目,转来供大家学习!!!
0
回复
举报
发布
gtrjolin1986
2014-05-20
是CO大这两天做的项目吗
0
回复
举报
发布
×
举报
举报人:
被举报人:coyoo
*
类型:
请选择类型
问题质量差
垃圾广告信息
偏离社区主题
违规内容
不友善内容
与社区已有问题重复
以上选项都不是
*
详细原因:
取消
提交
x
收藏成功!点击
我的收藏
查看收藏的全部帖子
是CO大这两天做的项目吗