tiny4412 串口驱动分析九 --- shell终端

发布时间:2023-06-25  

开发板:tiny4412ADK+S700 4GB Flash

主机:Wind7 64位

虚拟机:Vmware+Ubuntu12_04

u-boot:U-Boot 2010.12

Linux内核版本:linux-3.0.31

Android版本:android-4.1.2

 

 

在上面我们知道了/dev/ttySACx是如何生成的,此外还可以看到在/dev下还有设备结点/dev/console,以及/dev/tty等设备结点。

 

可以看到向/dev/ttySAC0、/dev/console和/dev/tty输入字符,然后这些字符会输出到串口终端上:

 

但是如果使用adb shell登陆后,现象不同:

其中,左边的窗口是在adb shell下,右边的窗口是串口终端的显示,可以看到如果在adb shell下向 /dev/ttySAC0和 /dev/console下写入字符的话,这个字符并没有在adb shell终端下显示,相反却在串口终端中显示出来,当在adb shell终端下向/dev/tty下写入字符时,就在adb shell终端下显示出来了,并没有影响到串口终端的显示。

上面的这些现象背后的原因是什么呢?下面我们开始分析内核源码来解释。

首先需要知道这些设备结点是怎么生成的:

late_initcall(chr_dev_init);

     ---- tty_init()   (drivers/tty/tty_io.c)

int __init tty_init(void)

{

    cdev_init(&tty_cdev, &tty_fops);

    if (cdev_add(&tty_cdev, MKDEV(TTYAUX_MAJOR, 0), 1) ||

        register_chrdev_region(MKDEV(TTYAUX_MAJOR, 0), 1, "/dev/tty") < 0)

        panic("Couldn't register /dev/tty drivern");

    device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 0), NULL, "tty");


    cdev_init(&console_cdev, &console_fops);

    if (cdev_add(&console_cdev, MKDEV(TTYAUX_MAJOR, 1), 1) ||

        register_chrdev_region(MKDEV(TTYAUX_MAJOR, 1), 1, "/dev/console") < 0)

        panic("Couldn't register /dev/console drivern");

    consdev = device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 1), NULL,

                  "console");

    if (IS_ERR(consdev))

        consdev = NULL;

    else

        WARN_ON(device_create_file(consdev, &dev_attr_active) < 0);


    return 0;

}

复制代码

在这里会在/dev/下生成console和tty两个设备结点,他们对应的fops分别是tty_fops和console_fops。


在上面分析的tty_register_device函数会生成/dev/ttySACx,它对应的fops在函数tty_register_driver中设置为了tty_fops。所以这里的关键是分析tty_fops和console_fops是如何实现的。


对比发现,console_fops和tty_fops是一样的:


static const struct file_operations tty_fops = {

    .llseek        = no_llseek,

    .read        = tty_read,

    .write        = tty_write,

    .poll        = tty_poll,

    .unlocked_ioctl    = tty_ioctl,

    .compat_ioctl    = tty_compat_ioctl,

    .open        = tty_open,

    .release    = tty_release,

    .fasync        = tty_fasync,

};


static const struct file_operations console_fops = {

    .llseek        = no_llseek,

    .read        = tty_read,

    .write        = redirected_tty_write,

    .poll        = tty_poll,

    .unlocked_ioctl    = tty_ioctl,

    .compat_ioctl    = tty_compat_ioctl,

    .open        = tty_open,

    .release    = tty_release,

    .fasync        = tty_fasync,

};


执行echo “peng” > /dev/ttySAC0的时候,会先调用tty_open然后调用tty_write,最后调用tty_release。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    站的提供的实验板上已经装配好了全部硬件。 串口通讯的硬件电路如上图所示 为了能够在电脑端看到单片机发出的数据,我们必须借助一个WINDOWS软件进行观察,这里我们利用一个免费的电脑串口调试软件。    点击这里可以下载并运行这个串口调试软件这是一个绿色的软件......
    重新枚举 在使用上面代码的时候存在一个问题:每次下载完程序后都需要重新拔插一次USB才可以识别串口,这是由于芯片在下载完程序后没有重新枚举所导致的。需要在设备上电后对USB进行重新枚举即可,使用方法......
    里就不一一举例了,你可以把错误拿去百度一下。 4.打开资料里面的XCOM串口调试助手,也可以百度去下载:(XCOM2.0比较稳定,也是我觉得最好用的串口调试软件) 别忘了长按M5311模块上的POWER键启......
    Port Driver软件。 安装好后,其使用期限是14天,后续超过这个期限重新安装即可。其使用方法也很简单,使用的时候点击“Add pair”即可,这里是已经Add了COM1和COM2之后......
    CAN调试软件,可以看到CAN盒接收到了STM32发出的数据。使用调试软件,发送CAN数据给STM32 串口调试助手中可以看到,STM32通过中断接收到了CAN盒发来的数据 ......
    STM32工程上printf()函数的方法实现;针对STM32的串口编程,可以通过USART1向计算机的串口调试助手打印数据,或者接收计算机串口调试助手的数据。 下面,我们可以实现STM32工程......
    不断的打印STM32发送CAN消息成功的信息。使用CAN调试软件,可以看到CAN盒接收到了STM32发出的数据。使用调试软件,发送CAN数据给STM32 串口调试助手中可以看到,STM32通过......
    向外发送数据,再通过上位机串口调试软件接收并显示。除此之外,还有另一种方法,通过STM32系列单片机的SWV(Serial Wire Viewer)实时跟踪技术来实现。 接下来我们通过一个简单的例子,看看......
    双击运行,无需安装。具体使用方法:只要输入电感L、电容C、频率F三者任意两者,可按相应按钮计算第三者! 第12款:BmpToPcb(bmp位图转PCB文件工具),这个软件可以将一幅BMP图形......
    安装包地址: http://www.keil.com/download/product 官方软件包地址: http://www.keil.com/dd2/Pack 具体安装,使用方法......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>