linux 内核开logo大小,请教 :linux启动时的logo
发布日期:2022-02-03 04:38:36 浏览次数:18 分类:技术文章

本文共 1555 字,大约阅读时间需要 5 分钟。

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的?手动?

|

内核的实现就是fb吧,你关掉fb的驱动,只用标准vga引导,是看不到企鹅的

因为没实际做过,再细也帮不了你

|

手动怎么行  内核有现成的调用栈打印api

使用dump_stack 即可 ,除了内联函数,其他的不会跟丢

|

回答楼主两个问题:

1 linux的启动logo是怎么实现的?

答:通常linux把图片数据变成数组编译进内核镜像,内核启动加载fb驱动过程中,注册完fb设备后,会将图片填入fb设备的显存地址.(具体好像是用fb设备的draw_image的函数,函数名可能不太准确.呵呵).

2 内核调试问题?

楼主想调试的话建议用dump_stack函数

|

dump_stack是拿来用的 不是研究的啊

用起来非常简单啊 在目标函数里dump_stack(); 会打印当前的函数调用栈

转载地址:https://blog.csdn.net/weixin_30596151/article/details/116732636 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:linux编辑关机脚本,Linux关机时执行指定脚本(亲测有效)
下一篇:怎样在linux系统解压软件,Linux下软件包的解压方式大全

发表评论

最新留言

感谢大佬
[***.8.128.20]2024年03月27日 04时53分53秒