uprintf是FreeBSD下内核函数, 作用是将内核信息输出到当前的tty给用户显示, 非常方便.  而linux下无此函数, 不过可以通过借用tty设备来达到目的.

以下是代码实现.

Kernel version: 2.6.28

gcc Version: 4.3.3

#include <linux/module.h> /* Needed by all modules */ #include <linux/kernel.h> /* Needed for KERN_INFO */ #include <linux/init.h> #include <linux/syscalls.h> #include <linux/unistd.h> #include <linux/sched.h> /* For current */ #include <linux/tty.h> /* For the tty declarations */ static void tty_print(const char *str) { struct tty_struct *cur_tty; // 取得当前的tty if ( current->signal ) cur_tty = current->signal->tty; else cur_tty = NULL; // 调用当前tty设备驱动write操作 if ( cur_tty ) { if ( cur_tty->driver ) { cur_tty->driver->ops->write( cur_tty, str, strlen( str ) ); /* cur_tty->driver->ops->write( cur_tty, "/015/012", 2 ); */ } } } int uprintf(const char *fmt, ...) { char printf_buf[1024]; va_list args; int printed; va_start(args, fmt); printed = vsprintf(printf_buf, fmt, args); va_end(args); tty_print( printf_buf ); return 0; } EXPORT_SYMBOL( uprintf ); static int __init uprintf_init(void) { uprintf( "hello init/n" ); return 0; } static void __exit uprintf_fini(void) { uprintf( "hello end/n" ); } module_init(uprintf_init); module_exit(uprintf_fini);

Makefile

obj-m = uprintf.o uprintf-objs = main.o KVERSION = $(shell uname -r) all: make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules clean: make -C /lib/modules/$(KVERSION)/build M=$(PWD) clean rm -f Module.markers modules.order

参考:

Replacing printk's

Linux下类FreeBSD uprintf实现相关推荐

  1. freebsd和linux服务器,我看Linux与FreeBSD

    简单说说,不做技术分析(主要是没什么技术),供大家参考,消遣.众所周知,这两个系统都是出自一个老祖宗,就是UNIX了.当然unix是非常非常稳定的,我想主要原因是当时还没有3721一类的流氓插件,也没 ...

  2. linux 运行 hyper v,Microsoft Loves Linux—运行在Hyper-V上的Linux与FreeBSD

    常常听到大家问我们重复的问题:"微软到底会为 Linux 做些什么? ",我们的答案是:"非常多! ". 将会持续的投资并且创新 Linux 上的能力,不仅只有在 Azure 公有云上,而在私有服务如 ...

  3. linux、FreeBSD网桥转发性能对比

    linux.FreeBSD网桥转发性能对比 linux 2.6.9(redhat enterprise linux 4 update1) Nk'Zhykk[I   包长   带宽     包速(pps ...

  4. Solaris, Linux 和 FreeBSD 的内核比较(转)

    Solaris, Linux 和 FreeBSD 的内核比较(转) 1.我个人认为作者MAX对Linux的了解不像他对Solaris那样深入,我不知道也没法知道他的下列关于Linux的内容来自自己的代 ...

  5. Linux、FreeBSD、Solaris三大系统内核比较

    作者:Max Bruning 本人转载 1.我个人认为作者MAX对Linux的了解不像他对Solaris那样深入,我不知道也没法知道他的下列关于Linux的内容来自自己的代码阅读分析还是只是来自第三方 ...

  6. 比较 Solaris、Linux 和 FreeBSD 内核(转)

    比较 Solaris.Linux 和 FreeBSD 内核(转) 分类: 操作系统 2011-05-10 23:19 60人阅读 评论(0) 收藏 举报   比较 Solaris.Linux 和 Fr ...

  7. Solaris、Linux和FreeBSD的内核比较

    1.我个人认为作者MAX对Linux的了解不像他对Solaris那样深入,我不知道也没法知道他的下列关于Linux的内容来自自己的代码阅读分析还是只是来自第三方的文档资料而未经自己实地验证: 2.我已 ...

  8. Solaris, Linux 和 FreeBSD 的内核比较

    1.我个人认为作者MAX对Linux的了解不像他对Solaris那样深入,我不知道也没法知道他的下列关于Linux的内容来自自己的代码阅读分析还是只是来自第三方的文档资料而未经自己实地验证:2.我已经 ...

  9. 双linux共用swap,在Linux和FreeBSD系统上共享swap空间

    这个部分描述了如何使用和来共享一个空间.有几种不同的方法可以实现它.如果你愿意,你可以在Linux安装之前安装FreeBSD,只是需要注意FreeBSD slice的顺序. 3.1.1安装Linux ...

  10. freebsd linux目录,FreeBSD和Linux如何互相访问文件系统

    一.如何mount Linux Ext2文件系统 经常有人在问,强大的FreeBSD为什么不能使用牛B的Linux ext文件系统呢?得到的回答通常是:"能,当然能了".可是,太多 ...

最新文章

  1. RabbitMQ的消费限流
  2. 量子计算机是二进制码,知识丨量子计算
  3. 【Python】7种方案,彻底实现可视化图片大小/分辨率控制自由
  4. .NET6之MiniAPI(十一):本地化
  5. weblogic创建域后启动不了_摩托车淋雨后启动不了什么原因?如何解决?
  6. java.util.stream_java.util.stream.Stream 接口中的常用方法
  7. 如何设置Win11账户密码有效期?Win11账户密码使用期限设置教程
  8. linux后台运行程序(secureCRT断掉或关闭后继续运行程序)
  9. 制冷行业人人必备的设计与仿真软件大全!(附下载)
  10. MySQL数据库应用与实践教程答案_MySQL数据库应用与实践教程(21世纪高等学校计算机教育实用规划教材)...
  11. linux 快速查找文件
  12. “会说话的汤姆猫家族-时代逐光者”3D数字藏品中奖名单公布
  13. OpenCV-Python之画椭圆
  14. 5G通信终端 5G通信设备 5G工业物联网
  15. vector<vector>排序
  16. JavaScript怎么获取当前时间的年月日?
  17. 启动rabbitmq,遇到发生系统错误2和发生系统错误5的解决方法
  18. AMBER:使用Cpptraj计算RMSD 以及使用中遇到的问题
  19. ENDNOTE 添加国标参考文献格式
  20. 百度搜狗360快速排名可以解决网站排名的哪些问题呢?

热门文章

  1. c语言程序输出数字图形,C语言数组应用之图形数字的输出
  2. IntelliJ IDEA集成Maven
  3. sap后台配置原因代码_SAP FI后台配置清单
  4. 基于安卓平台的软件加固方案的设计与实现_微信支付跨平台软件架构
  5. python 制作网页 选择题_python爬取网页电子课本图片,自己制作可打印的课本文件...
  6. 网页授权前端 java_在开发网页授权获取用户基本信息时code是null
  7. python pandas常用函数_python:pandas常用功能函数操作
  8. java中12个月_C中的12个月日历
  9. IIS、MySQL、Redis环境搭建
  10. 关于fork()父子进程返回值的问题