首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

请问 :linux启动时的logo

2012-09-25 
请教 :linux启动时的logoHi 大虾们:有一个问题请教。关于frame buffer的问题。我现在在调试omap的开发板,非

请教 :linux启动时的logo
Hi 大虾们:
  有一个问题请教。关于frame buffer的问题。
  我现在在调试omap的开发板,非常迷茫。。。。。。
   
  现在最简单的事情就是我想看看logo(左上角的小企鹅)是如何打印出来的。
  我的调试方法比较简陋。就是看代码然后加打印。
  call treace:

  file:logo.c
  fb_find_logo(int depth)
  file:fbmem.c
  fb_prepare_logo(struct fb_info *info, int rotate)
  file:fbcon.c
  static void fbcon_prepare_logo(struct vc_data *vc, struct fb_info *info,
  int cols, int rows, int new_cols, int new_rows)
  file:fbcon.c
  static void fbcon_init(struct vc_data *vc, int init)
  file:vt.c
  static void visual_init(struct vc_data *vc, int num, int init)
  {
  ........
  vc->vc_sw->con_init(vc, init);
  ........
  }
  file:vt.c
  static int bind_con_driver(const struct consw *csw, int first, int last,int deflt)
  file:vt.c
  int take_over_console(const struct consw *csw, int first, int last, int deflt)
  file:fbcon.c
  static int fbcon_takeover(int show_logo)
  file:fbcon.c
  static int fbcon_fb_registered(struct fb_info *info)
  file:fbcon.c
  static int fbcon_event_notify(struct notifier_block *self,unsigned long action, void *data)
   
  后面找不到调用了,而且看了代码加了打印,发现这条线索好像是不对的。有没有什么问题啊?是不是我的trace的思路错了?

  请大虾指点。

谢谢

[解决办法]
要么你编一个debug版的内核试试,优化后的内核有些函数内联了,有些被删了,有些逻辑变了,反正很坑爹
[解决办法]
我一直只是加debug选项,不过又查了下貌似仅仅是增加了调试符号,优化其实还是开的
[解决办法]
你进到你要调试的几个文件的目录,在makefile里加上-O0,如果还跟不到你的代码,那可能就是trace不对
[解决办法]
你怎么trace的?手动?
[解决办法]

探讨

还有没有谁知道这个logo kernel boot后再lcd左上角有个小企鹅。
到底是怎么打印到lcd上面的?

除了frame buffer的方法还有其他什么方法吗?

谢谢

[解决办法]
手动怎么行 内核有现成的调用栈打印api
使用dump_stack 即可 ,除了内联函数,其他的不会跟丢

[解决办法]
回答楼主两个问题:
1 linux的启动logo是怎么实现的?
答:通常linux把图片数据变成数组编译进内核镜像,内核启动加载fb驱动过程中,注册完fb设备后,会将图片填入fb设备的显存地址.(具体好像是用fb设备的draw_image的函数,函数名可能不太准确.呵呵).
2 内核调试问题?
楼主想调试的话建议用dump_stack函数
[解决办法]
dump_stack是拿来用的 不是研究的啊
用起来非常简单啊 在目标函数里dump_stack(); 会打印当前的函数调用栈

热点排行