Okash Khawaja, on Wed 23 Nov 2016 14:46:59 +0000, wrote: > So I have a simple kernel module that registers a new ldisc. When userspace > attaches that ldisc to /dev/ttyS0, the kernel module is able to write to that > serial port using tty->ops->write(). Ok, good for a start :) > Currently I'm investigating the core problem of opening /dev/ttyS0 from kernel > space and attaching our ldisc to it. Are there any existing ideas around this? What I wrote before: “ how can speakup open the port? We don't have a process context or /dev/, so we can't just use sys_open and alike. What we could use is some function which takes a minor/major pair or a device name, and returns a filp, then we can tty_set_ldisc(N_SPEAKUP) on file_tty(filp), but I don't know if such thing exists? That would probably be building a struct inode (getting inspired from fs/ramfs/), then just open it? Something like: struct inode *inode = new_inode(sb); init_special_inode(inode, S_IFCHR, MKDEV(major, minor)); filp = get_empty_filp(); do_dentry_open(filp, inode, NULL, NULL); struct tty_struct *tty = file_tty(filp); tty_set_ldisc(tty, N_SPEAKUP); ” > Is this worth investigating: to find correct tty without opening /dev/ttyS0 and > assigning our ldisc to it. > Realistically, how early in boot process do we want the ldisc > assigned? As early as possible :) That'll mean after tty initialization and after serial driver initialization Samuel _______________________________________________ Speakup mailing list Speakup@xxxxxxxxxxxxxxxxx http://linux-speakup.org/cgi-bin/mailman/listinfo/speakup