当前位置:  技术问答>linux和unix

100分求 内核模块的调试方法

    来源: 互联网  发布时间:2017-02-07

    本文导语:  今天遇到一个新问题,小弟也是新手 我现在要修改内核源码 Board-dm646x-evm.c (kernelarcharmmach-davinci) 需要添加几个东西,假如加入的是这个  I2C_BOARD_INFO("frontboard", 0x90), 问题来了,就是出现在调试问题,    我不...

今天遇到一个新问题,小弟也是新手
我现在要修改内核源码 Board-dm646x-evm.c (kernelarcharmmach-davinci)

需要添加几个东西,假如加入的是这个  I2C_BOARD_INFO("frontboard", 0x90),


问题来了,就是出现在调试问题,    我不能保证我的代码一次性的写对,肯定是需要返回修改测试的。

以前遇到驱动模块的时候,都是insmod 一个模块,测试写的对不对,然后在卸载,很方便调试了,但是这个内核文件我看了一下,好像不是模块的,因为没找到声明这个文件是模块的 宏,  这里我就不知道怎么调试了, 大家能不能给我点方法呢?

先谢谢了



|
arch下的绝对是要编译进内核的,不能做成模块。
也就是说,只能改一次,编译一次,烧写一次。

|
Linux kernel 2.6源代码目录树中:includelinuxinit.h文件中实现了module_init等宏:

#define pure_initcall(fn) __define_initcall("0",fn,0)

#define core_initcall(fn) __define_initcall("1",fn,1)
#define core_initcall_sync(fn) __define_initcall("1s",fn,1s)
#define postcore_initcall(fn) __define_initcall("2",fn,2)
#define postcore_initcall_sync(fn) __define_initcall("2s",fn,2s)
#define arch_initcall(fn) __define_initcall("3",fn,3)
#define arch_initcall_sync(fn) __define_initcall("3s",fn,3s)
#define subsys_initcall(fn) __define_initcall("4",fn,4)
#define subsys_initcall_sync(fn) __define_initcall("4s",fn,4s)
#define fs_initcall(fn) __define_initcall("5",fn,5)
#define fs_initcall_sync(fn) __define_initcall("5s",fn,5s)
#define rootfs_initcall(fn) __define_initcall("rootfs",fn,rootfs)
#define device_initcall(fn) __define_initcall("6",fn,6)
#define device_initcall_sync(fn) __define_initcall("6s",fn,6s)
#define late_initcall(fn) __define_initcall("7",fn,7)
#define late_initcall_sync(fn) __define_initcall("7s",fn,7s)

#define __initcall(fn) device_initcall(fn)

/* ... */
/**
 * module_init() - driver initialization entry point
 * @x: function to be run at kernel boot time or module insertion
 * 
 * module_init() will either be called during do_initcalls() (if
 * builtin) or at module insertion time (if a module).  There can only
 * be one per module.
 */
#define module_init(x) __initcall(x);



系统设备的初始化有先后顺序的,module_init宏或者init_moudle()函数只是其中的一个方法!!!

|
不是所有的硬件驱动可以做成kernel module方式,系统早期初始化时用到的设备就只能build in kernel.
例如一些总线控制器驱动。

输出日志是个好的选择,或者kgdb,或者JTAG调试。

    
 
 

您可能感兴趣的文章:

  • kgdb调试环境配好了,怎么调试内核阿?????
  • Linux内核调试器
  • kprobes 内核调试工具
  • 到底怎么样调试linux内核啊?
  • (菜鸟飞飞,在线等)问个关于内核调试的问题
  • 如何调试LINUX内核
  • 在内核调试中如何写文件
  • 大侠帮忙!模块调试(非内核模块)
  • 调查一下:编写Linux内核模块 驱动程序各位高手所用的编辑环境和调试工具
  • 可以单步调试内核的执行吗?
  • 求linux 内核调试 书籍资料
  • 用vmware for windows怎么源码调试linux内核啊?我在网上查了,看不懂。
  • 关于内核调试的问题
  • 内核模块一加载计算机就死机,如何调试
  • 单机,调试内核时,无法进入调试状态,怎么回事?
  • 虚拟机搭建kgdb内核调试平台时出错
  • 关于qemu调试linux内核的问题
  • 求救:写的内核模块一加载就当机,怎么看系统日志调试啊??
  • OS 内核调试错误
  • GDB调试linux内核出现问题
  • *******是不是对内核模块编程然后再重新编译内核就可以把此模块整合到linux系统中
  • 内核模块跟内核版本不匹配????????
  • [求教]内核加载模块后,这部分内容编译在内核里的吗?
  • 谁能提供kgdb内核补丁内核模块的下载
  • 驱动模块可以编入内核,想单独编译成模块,makefile怎么写?
  • 想删除内核中的一个模块,输入命令后,系统提示该模块不存在。但是我lsmod时,它在/proc/modules中。求解。
  • 求内核和用户态简单易行的通信方法,用户态只需得到一个内核模块参数
  • 不重新编译内核能修改内核函数吗? iis7站长之家
  • Linux 内核模块编程问题!!!!
  • 内核模块和设备驱动的区别?
  • 怎么给内核加载自己编写的模块
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux内核中影响tcp三次握手的一些协议配置
  • Fedora Core 2自带的内核升级程序下载下来内核后,要不要再编译一遍内核?
  • TCP协议四次断连过程介绍及Linux内核协议栈中相关设置项
  • 进程内核栈和操作系统内核栈的关系
  • CentOS 6内核升级:下载编译启用新内核版本详细过程
  • Linux中内核线程不访问内核态地址空间?
  • Linux进程的内核栈和用户栈概念,相互关系及切换过程
  • 2.6内核下编译2.4内核
  • linux内核中的likely宏和unlikely宏介绍及用法
  • 编译新内核后怎么进入原来内核
  • CentOS 6.5 下载地址及如何升级内核(kernel)版本到 3.10.28
  • 请问linux中如何判断内核是否已经启动。(在内核中写程序)
  • Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法
  • 请教:如何安装新内核(rpm包)而不同原来得内核冲突?? 在线等待!!
  • docker使用的技术之Container内核原理介绍
  • linux为什么要升级内核?升级内核有何作用?
  • 内核升级后,如何在新的内核中加载显卡驱动?
  • 内核源码和结果make过的内核源码有什么区别
  • 不重新编译内核能修改内核函数吗?
  • 如何学好内核?学了内核能应用于哪方面?
  • 请问在2.6的内核环境下编译2.4的内核有没有什么特殊的要求


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3