as4.8升级内核后找不到/dev/tty0

发布于 2022-10-15 10:13:18 字数 165 浏览 37 评论 0

系统是redhat as4 update8
内核版本是:2.6.36.2
.config文件不方便放上来,重新编译内核并成功安装后,用新内核启动后在keymap的时候就提示找不到/dev/tty0这个文件
网上搜了很多资料,最后试验均以失败告终。
特来CU求助,请大侠们指点,谢谢!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

南烟 2022-10-22 10:13:18

基本上除以下功能外其他功能都正常:
1.终端鼠标支持:以前在字符界面可以用鼠标拷贝,现在不行
2.进不了x-windows,即使自己手动建立tty0也还是不行

ㄖ落Θ余辉 2022-10-22 10:13:18

昨天用默认配置又跑了遍,还是这个错误
tty1-9都有的,就是没tty0

眼趣 2022-10-22 10:13:18

我也遇到这个问题,请高手帮助!

烟柳画桥 2022-10-22 10:13:18

回复 1# Cloud.D.Ace

今天正好看到这里,内核版本2.6.33。

tty0与tty1至tty$(MAX_NR_CONSOLES)虽然是同一主设备号,关联的却是不同的file_operations,注册也是分开的。tty0驱动注册失败可是会panic的,没有产生节点可能是device_create失败了。我这个版本里,device_create没有检查返回值。2.6.39里,这个地方检查返回值了,但是出错情况下并没发出什么警告信息。

2.6.33的drivers/char/vt.c,2.6.39的drivers/tty/vt/vt.c,在vty_init的开头,LZ可以看一下代码里有没有检查device_create的返回值,然后依据情况修改一下代码,在device_create失败时panic,看看是否真是这里有问题。

2.6.33:

  1. int __init vty_init(const struct file_operations *console_fops)
  2. {
  3.         cdev_init(&vc0_cdev, console_fops);
  4.         if (cdev_add(&vc0_cdev, MKDEV(TTY_MAJOR, 0), 1) ||
  5.             register_chrdev_region(MKDEV(TTY_MAJOR, 0), 1, "/dev/vc/0") < 0)
  6.                 panic("Couldn't register /dev/tty0 driver\n");
  7.         device_create(tty_class, NULL, MKDEV(TTY_MAJOR, 0), NULL, "tty0");
  8.         
  9.         vcs_init();

复制代码2.6.39

  1. int __init vty_init(const struct file_operations *console_fops)
  2. {
  3.         cdev_init(&vc0_cdev, console_fops);
  4.         if (cdev_add(&vc0_cdev, MKDEV(TTY_MAJOR, 0), 1) ||
  5.             register_chrdev_region(MKDEV(TTY_MAJOR, 0), 1, "/dev/vc/0") < 0)
  6.                 panic("Couldn't register /dev/tty0 driver\n");
  7.         tty0dev = device_create(tty_class, NULL, MKDEV(TTY_MAJOR, 0), NULL, "tty0");
  8.         if (IS_ERR(tty0dev))
  9.                 tty0dev = NULL;
  10.         else
  11.                 WARN_ON(device_create_file(tty0dev, &dev_attr_active) < 0);

复制代码

呆橘 2022-10-22 10:13:18

谢谢5楼,2.6.36版本相关代码
int __init vty_init(const struct file_operations *console_fops)
{
        cdev_init(&vc0_cdev, console_fops);
        if (cdev_add(&vc0_cdev, MKDEV(TTY_MAJOR, 0), 1) ||
            register_chrdev_region(MKDEV(TTY_MAJOR, 0), 1, "/dev/vc/0" < 0)
                panic("Couldn't register /dev/tty0 driver\n";
        device_create(tty_class, NULL, MKDEV(TTY_MAJOR, 0), NULL, "tty0";

        vcs_init();

        console_driver = alloc_tty_driver(MAX_NR_CONSOLES);
        if (!console_driver)
                panic("Couldn't allocate console driver\n";
        console_driver->owner = THIS_MODULE;
        console_driver->name = "tty";
        console_driver->name_base = 1;
        console_driver->major = TTY_MAJOR;
        console_driver->minor_start = 1;
        console_driver->type = TTY_DRIVER_TYPE_CONSOLE;
        console_driver->init_termios = tty_std_termios;
        if (default_utf
                console_driver->init_termios.c_iflag |= IUTF8;
        console_driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_RESET_TERMIOS;
        tty_set_operations(console_driver, &con_ops);
        if (tty_register_driver(console_driver))
                panic("Couldn't register console driver\n";
        kbd_init();
        console_map_init();
#ifdef CONFIG_MDA_CONSOLE
        mda_console_init();
#endif
        return 0;
}
请帮看看咋修改。

无法回应 2022-10-22 10:13:18

本帖最后由 tempname2 于 2011-06-12 19:18 编辑

device_create(tty_class, NULL, MKDEV(TTY_MAJOR, 0), NULL, "tty0");
cssglgs 发表于 2011-06-12 12:07

检查一下返回值。

  1. void *p = device_create(tty_class, NULL, MKDEV(TTY_MAJOR, 0), NULL, "tty0");
  2. if (IS_ERR(p))
  3.             printk("###########device_create_failed:%l\n",PTR_ERR(p));

复制代码启动以后在日志里搜索相关提示信息:

  1. dmesg|grep device_create_failed

复制代码如果有结果,说明确实是这里有问题,但具体是什么问题还要进一步调试。如果没有结果。。。。那就不好说了,一时看不出其它可能出错的地方。

无声无音无过去 2022-10-22 10:13:18

没有信息输出。不知道啥错。

魂牵梦绕锁你心扉 2022-10-22 10:13:18

没有信息输出。不知道啥错。
cssglgs 发表于 2011-06-13 12:16

这个问题你搞定了吗?
我的已解决,如果你还没有解决,尝试修改.config中的CONFIG_SYSFS_DEPRECATED=y
CONFIG_SYSFS_DEPRECATED_V2=y
这2项,然后重新编译

爱要勇敢去追 2022-10-22 10:13:18

果然很对
增加
CONFIG_SYSFS_DEPRECATED=y
CONFIG_SYSFS_DEPRECATED_V2=y

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文