2019-01-12 10:58:07 xld_19920728 阅读数 293
  • 玩转Linux:常用命令实例指南

    本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通 。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 注意: 1、本课程原价99元,现在仅需29元!购课就送5门价值300元的编程课! 2、购课后登陆csdn学院官网,在课程目录页面即可下载课件。 学完即可轻松应对工作中 85% 以上的 Linux 使用场景 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本课程【现在享受秒杀价39元】 3)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 注意: 1)现在购买至少享受60元优惠; 2)购课后添加微信eduxy-1,发送订单截图领取300元编程礼包。 --------------------------------------------------------------- 这门课程,绝对不会让你觉得亏! 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+300元编程礼包。   人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。   在这门课中,我们保证你能收获到这些 1)快速掌握 Linux 常用命令及配置 2)Linux核心知识点 3) 文件、进程、磁盘、用户管理,以及网络工具命令、文件传输等 4)Vi/Vim编辑器用法  

    7154 人正在学习 去看看 良许

一、应用场景:

当我们要调试一台基于linux设备时,如果出现问题,但是没有串口查看信息,这个时候就可以考虑使用telnet登入到设备,并用串口打印信息重定向到telent窗口的方案;

二、源码实现:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
    int tty = -1;
    char *tty_name = NULL;

    if(argc < 2)
    {
        printf("miss argument\n");
        return 0;
    }

    /* 获取当前tty名称 */
    tty_name = ttyname(STDOUT_FILENO);
    printf("tty_name: %s\n", tty_name);

    if(!strcmp(argv[1], "on"))
    {
        /* 重定向console到当前tty */
        tty = open(tty_name, O_RDONLY | O_WRONLY);
        ioctl(tty, TIOCCONS);
        perror("ioctl TIOCCONS");
    }
    else if(!strcmp(argv[1], "off"))
    {
        /* 恢复console */
        tty = open("/dev/console", O_RDONLY | O_WRONLY);
        ioctl(tty, TIOCCONS);
        perror("ioctl /dev/console");
    }
    else
    {
        printf("error argument\n");
        return 0;
    }

    close(tty);
    return 0;
}

 

2012-07-01 20:39:50 bbs598598 阅读数 742
  • 玩转Linux:常用命令实例指南

    本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通 。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 注意: 1、本课程原价99元,现在仅需29元!购课就送5门价值300元的编程课! 2、购课后登陆csdn学院官网,在课程目录页面即可下载课件。 学完即可轻松应对工作中 85% 以上的 Linux 使用场景 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本课程【现在享受秒杀价39元】 3)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 注意: 1)现在购买至少享受60元优惠; 2)购课后添加微信eduxy-1,发送订单截图领取300元编程礼包。 --------------------------------------------------------------- 这门课程,绝对不会让你觉得亏! 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+300元编程礼包。   人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。   在这门课中,我们保证你能收获到这些 1)快速掌握 Linux 常用命令及配置 2)Linux核心知识点 3) 文件、进程、磁盘、用户管理,以及网络工具命令、文件传输等 4)Vi/Vim编辑器用法  

    7154 人正在学习 去看看 良许

平台:linux 2.6.28.7
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/device.h>
#include <linux/miscdevice.h>
#include <linux/delay.h>
#include <asm/irq.h>
/*
#include <asm/arch/regs-gpio.h>
#include <asm/hardware.h>

#include <linux/config.h>
#include <linux/devfs_fs_kernel.h>
*/
static struct class *firstdrv_class;
static struct class_device *firstdrv_class_dev;
int major;
static int first_driver_open(struct inode *inode,struct file *file)//打开文件
{
printk("This is my first driver test!!!\n");
return 0;
}
static ssize_t  first_driver_write(struct file *file,const __user *buf,size_t count,loff_t *ppos)//打印输出
{
printk("My first driver is writing....\n");
return 0;

}

//入口结构体

static struct file_operations  first_driver_fops = {
.owner = THIS_MODULE,
.open =first_driver_open,
.write = first_driver_write,
};
//注册入内核
int first_driver_init(void)
{
register_chrdev(0,"first_drv",&first_driver_fops);
firstdrv_class = class_create(THIS_MODULE, "first_drv");
if(IS_ERR(firstdrv_class))
printk("firstdrv_class creates error! \n");
firstdrv_class_dev = device_create(firstdrv_class, NULL, MKDEV(major, 0), NULL, "xyz"); /* /dev/xyz */
if(unlikely(IS_ERR(firstdrv_class)))
printk("/dev/xyz  creates error! \n");
return 0;

}


void  first_driver_exit(void)
{
unregister_chrdev(0,"first_drv");
device_unregister(firstdrv_class_dev);
class_destroy(firstdrv_class);
}
module_init(first_driver_init);
module_exit(first_driver_exit);
MODULE_LICENSE("GPL");                              // 遵循的协议

注意:在firstdrv_class_dev = device_create(firstdrv_class, NULL, MKDEV(major, 0), NULL, "xyz"); 出不起作用,注册驱动后不能自动生成文件,还得手动加入。

查资料修改/etc/init.d/rcS(要在超级终端下VI修改,否则启动打不开此文件了)。其中添加echo /sbin/mdev > /proc/sys/kernel/hotplug还是不行,求大家帮忙解决??





2014-03-09 02:57:36 szkarry 阅读数 619
  • 玩转Linux:常用命令实例指南

    本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通 。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 注意: 1、本课程原价99元,现在仅需29元!购课就送5门价值300元的编程课! 2、购课后登陆csdn学院官网,在课程目录页面即可下载课件。 学完即可轻松应对工作中 85% 以上的 Linux 使用场景 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本课程【现在享受秒杀价39元】 3)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 注意: 1)现在购买至少享受60元优惠; 2)购课后添加微信eduxy-1,发送订单截图领取300元编程礼包。 --------------------------------------------------------------- 这门课程,绝对不会让你觉得亏! 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+300元编程礼包。   人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。   在这门课中,我们保证你能收获到这些 1)快速掌握 Linux 常用命令及配置 2)Linux核心知识点 3) 文件、进程、磁盘、用户管理,以及网络工具命令、文件传输等 4)Vi/Vim编辑器用法  

    7154 人正在学习 去看看 良许

大家项目代码中肯定有

#ifdef XXX_DEBUG

printf(xxxxx);

#endif

原来一直在用vxworks开发,vxworks开发时用来控制打印输出很简单

直接定义就行了

但这种方法在linux下就不行了

你无法直接控制一个正在运行的进程

可以通过间接方式进行控制

比如

funcA()

{

...

signal(USR1,funcB);

...

}

在funcB函数中来进行控制进行输出

要想控制funcA的打印输出,只要向funcA 的进程发送kill USR1 funcA 就行了

以上是一个好的方法,我已经在项目中这样使用,效果还不错

可以改变当前程序运行状态,来得到些打印信息

因为有些随机bug,你系统重启后可能就没了,下次出现不知要到什么时候


2014-08-20 11:25:29 u014088674 阅读数 478
  • 玩转Linux:常用命令实例指南

    本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通 。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 注意: 1、本课程原价99元,现在仅需29元!购课就送5门价值300元的编程课! 2、购课后登陆csdn学院官网,在课程目录页面即可下载课件。 学完即可轻松应对工作中 85% 以上的 Linux 使用场景 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本课程【现在享受秒杀价39元】 3)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 注意: 1)现在购买至少享受60元优惠; 2)购课后添加微信eduxy-1,发送订单截图领取300元编程礼包。 --------------------------------------------------------------- 这门课程,绝对不会让你觉得亏! 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+300元编程礼包。   人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。   在这门课中,我们保证你能收获到这些 1)快速掌握 Linux 常用命令及配置 2)Linux核心知识点 3) 文件、进程、磁盘、用户管理,以及网络工具命令、文件传输等 4)Vi/Vim编辑器用法  

    7154 人正在学习 去看看 良许

应用程序名字 >输出文件<输入文件

利用>>符号来代替>,>>符号在Linux系统中表示文件的追加

如果不指定文件路径的话,则系统会默认在当前目录下创建这些文件并保存信息。如果系统管理员想在指定目录下保存信息的话,则可以在上面的文件名称前面加上路径。在这个命令中,即支持绝对路径也支持相对路径。

可以通过命令将标准输出流与错误输出流分开来存放:>标准输出文件名 2>错误输出文件名

Linux打印显示时间

阅读数 2751

没有更多推荐了,返回首页