当前位置: 技术问答>linux和unix
请教 :linux启动时的logo
来源: 互联网 发布时间:2017-03-04
本文导语: Hi 大虾们: 有一个问题请教。关于frame buffer的问题。 我现在在调试omap的开发板,非常迷茫。。。。。。 现在最简单的事情就是我想看看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的思路错了?
请大虾指点。
谢谢
有一个问题请教。关于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的?手动?
|
内核的实现就是fb吧,你关掉fb的驱动,只用标准vga引导,是看不到企鹅的
因为没实际做过,再细也帮不了你
|
手动怎么行 内核有现成的调用栈打印api
使用dump_stack 即可 ,除了内联函数,其他的不会跟丢
使用dump_stack 即可 ,除了内联函数,其他的不会跟丢
|
回答楼主两个问题:
1 linux的启动logo是怎么实现的?
答:通常linux把图片数据变成数组编译进内核镜像,内核启动加载fb驱动过程中,注册完fb设备后,会将图片填入fb设备的显存地址.(具体好像是用fb设备的draw_image的函数,函数名可能不太准确.呵呵).
2 内核调试问题?
楼主想调试的话建议用dump_stack函数
1 linux的启动logo是怎么实现的?
答:通常linux把图片数据变成数组编译进内核镜像,内核启动加载fb驱动过程中,注册完fb设备后,会将图片填入fb设备的显存地址.(具体好像是用fb设备的draw_image的函数,函数名可能不太准确.呵呵).
2 内核调试问题?
楼主想调试的话建议用dump_stack函数
|
dump_stack是拿来用的 不是研究的啊
用起来非常简单啊 在目标函数里dump_stack(); 会打印当前的函数调用栈
用起来非常简单啊 在目标函数里dump_stack(); 会打印当前的函数调用栈