LinuxSir.Org  
| 网站首页 | 论坛帮助 |

欢迎来到LinuxSir.Org!
您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。


发表新主题 回复
精华主题  
主题工具
旧 05-11-28, 07:22 第 16 帖
hj_18
 
 
 
注册会员  
  注册日期: Jan 2003
  我的住址: 上海
  帖子: 947
  精华: 6
 

我要具体介绍一下自己是怎么改内核补丁的,因为内核更新太快,我又没有时间,也没有兴趣做简单重复的劳动,现在我对阅读fbcon.c发生了兴趣,所以在我搞懂这个之前,可能不会再发布新的补丁,而你们,可以从我的介绍中,自己找到方法来解决问题。
首先,打上日本人的补丁,然后是要修改drivers/input/keyboard/atkbd.c
PHP 代码:
diff -urNp linux/drivers/input/keyboard/atkbd./linux/drivers/input/keyboard/atkbd.c
--- linux/drivers/input/keyboard/atkbd.c    2005-11-26 13:39:19.000000000 +0000
+++ linux/drivers/input/keyboard/atkbd.c    2005-11-26 13:55:22.000000000 +0000
@@ -290,+290,56 @@ static irqreturn_t atkbd_interrupt(struc
     
if (!atkbd->enabled)
         
goto out;
 
+
#ifdef CONFIG_UNICON
+#define  LR_CTRL_KEY_DOWN            0x1d
+#define  LR_CTRL_KEY_UP              (LR_CTRL_KEY_DOWN + 0x80)
+#define  L_ALT_KEY_DOWN              0x38
+#define  L_ALT_KEY_UP                (L_ALT_KEY_DOWN + 0x80)
+#define  NUM_LOCK_KEY_DOWN           0x45
+extern int (*Unicon_fnLowerKeyHook) (unsigned char ch);
+
extern int (*Unicon_fnKeyHook) (struct tty_struct *tty
+                                
unsigned char chchar flag);
+
extern void (*Unicon_TtyChangeUpdate) (int nTty);
+
#endif
+    
+
#ifdef CONFIG_UNICON    
+        if (Unicon_fnLowerKeyHook != NULL)
+        {
+            static 
int ctrl_pressed 0,
+                       
alt_pressed 0;
+            switch (
data)
+            {
+                case 
NUM_LOCK_KEY_DOWN:
+                    if (
ctrl_pressed == &&
+                        
alt_pressed == 1)
+                    {
+                        
Unicon_fnKeyHook NULL;
+                        
Unicon_fnLowerKeyHook NULL;
+                        
Unicon_TtyChangeUpdate NULL;
+                        
printk ("release unicon key hook successfully.\n");
+                     }
+                     else
+                         break;
+                 case 
LR_CTRL_KEY_DOWN:
+                     
ctrl_pressed 1;
+                     break;
+                 case 
LR_CTRL_KEY_UP:
+                     
ctrl_pressed 0;
+                     break;
+                 case 
L_ALT_KEY_DOWN:
+                     
alt_pressed 1;
+                     break;
+                 case 
L_ALT_KEY_UP:
+                     
alt_pressed 0;
+                     break;
+            }  
+           
/* return 1 ==> processed by kernel
+              return 0 ==> processed by app */
+           if ((*Unicon_fnLowerKeyHook) (data) == 1)
+           
goto out;
+        }
+
#endif
+            
     
input_event(&atkbd->devEV_MSCMSC_RAWcode);
 
     if (
atkbd->translated) { 
接着是:
PHP 代码:
diff -urNp linux/include/linux/tty_flip../linux/include/linux/tty_flip.h
--- linux/include/linux/tty_flip.h    2005-11-26 13:39:38.000000000 +0000
+++ linux/include/linux/tty_flip.h    2005-11-26 13:55:50.000000000 +0000
@@ -7,+7,25 @@
 
#define _INLINE_ static __inline__
 #endif
 
+#ifdef CONFIG_UNICON
+extern int (*Unicon_fnKeyHook) (struct tty_struct *tty,
+                                
unsigned char chchar flag);
+
#endif
+
+
 
_INLINE_ void tty_insert_flip_char(struct tty_struct *tty,
                    
unsigned char chchar flag)
 {
+
#ifdef CONFIG_UNICON
+       if (Unicon_fnKeyHook != NULL)
+       {
+            
/* return 1 ==> processed by kernel
+               return 0 ==> processed by app */
+            if ((*Unicon_fnKeyHook) (ttychflag) == 1)
+               return;
+       }
+
#endif
+           
     if (
tty->flip.count TTY_FLIPBUF_SIZE) {
         
tty->flip.count++;
         *
tty->flip.flag_buf_ptr++ = flag
然后看看drivers/video/unicon下面的xl_keymasks.c在不在,不在的就从我的补丁中拷贝一个。

现在去看我那个丑陋的手法,在xl_unikey.c
PHP 代码:
+void  device_cls_input_bottom (char *cl)
+{
+    
unsigned color;
+    
unsigned long flags;
+
+    
spin_lock_irqsave(&unikey_read_lockflags);
+    if (
bHasClosed [nCurTty 1] == 0)
+        
copy_from_user(&colorclsizeof(unsigned char));
+    else
+        
color 0;
+
+    
FbClearRect (&our_fbhzinfocolor,
+                 (
our_fbhzinfo.height/16)*2-2
+                 (
our_fbhzinfo.height/16)*2-1);
+    
spin_unlock_irqrestore(&unikey_read_lockflags);
+} 
看见那个奇怪的 (our_fbhzinfo.height/16)*2-2吗,它和我在unicon中的Unikey.cpp的修改出于一辙,我看都是被fbcon.c的改动坑的。
现在,检查一下别的地方和原来有没有变化就可以了。







__________________
生活是个骗子,就像在《无极》里说的:“不管你得到什么,最后都会失去更多”。
个人博客:http://hjonline.bokee.com/

此帖于 05-11-28 07:31 被 hj_18 编辑.
  hj_18 当前离线   回复时引用此帖
旧 05-11-29, 07:43 第 17 帖
hj_18
 
 
 
注册会员  
  注册日期: Jan 2003
  我的住址: 上海
  帖子: 947
  精华: 6
 

各下载点的文件已修复patch内核的错误。
  hj_18 当前离线   回复时引用此帖
旧 06-01-14, 02:22 第 18 帖
kukukuan
 
 
 
注册会员  
  注册日期: Feb 2005
  帖子: 36
  精华: 0
 

好帖子,顶一下吧

atkbd.c是串口(ps2)的驱动,你这个键盘的patch可能对USB键盘无效吧!我没有USB键盘,没测试过

还有就是 our_fbhzinfo.height/16-X这个地方,我编译了几次模块,发现有个问题。
原来给的数是没错的,如果你在grub或lilo里边加了vga=xxx的话,输入条就跑上去了,如果在加载unikey前手动加载fb的话,输入条正常,不知为什么

现在unicon有三个问题,一个就是键盘截获的问题,我尝试在drivers/char/keyboard.c里修改没有成功。看见bootsplash里边按ESC显示Verbose就是在那里改的,不知道自己那里改错了。
二是输入条的问题,hj_18兄若是有空不妨作个on the spot的来,彻底解决输入条的问题。
三是unicode的问题,cce好像已经支持unicode了,不知道能不能借过来。

就说这么多了,其实还是期待着出现一个好用的中文平台。如今cce,zhcon在gcc 4里边编都编不出来,想将就一下都困难。

哎,难道纯console真的完全过时了吗?
  kukukuan 当前离线   回复时引用此帖
旧 06-01-14, 02:26 第 19 帖
kukukuan
 
 
 
注册会员  
  注册日期: Feb 2005
  帖子: 36
  精华: 0
 

按keyboard.c里边的写法,keyhooks.c里边的函数要全部重写

keyboard.c已经基本上不支持scancode直接使用了,转而用keycode和down来标志键的按下与否,郁闷ing……
  kukukuan 当前离线   回复时引用此帖
旧 06-01-14, 02:47 第 20 帖
babo
 
babo 的头像
 
 
注册会员  
  注册日期: Mar 2003
  我的住址: 北京
  帖子: 1,259
  精华: 12
 

厉害,高手中的高手了







__________________
CPU--->AMD Sempron 2400+(超2G)
内存-->512M DDR
硬盘-->160G+120G
显卡-->Geforce 5200 128M
http://www.xinlogs.com
奇迹不是神,而是人创造的!
  babo 当前离线   回复时引用此帖
旧 06-01-15, 14:57 第 21 帖
hj_18
 
 
 
注册会员  
  注册日期: Jan 2003
  我的住址: 上海
  帖子: 947
  精华: 6
 

其实我现在想想,还是先让zhcon支持utf-8比较好,这样更容易为大家接受。目前我家中有事,如果过了半年我还没被人杀了的话,会捡起这个项目继续研究的。
  hj_18 当前离线   回复时引用此帖
旧 06-01-15, 16:46 第 22 帖
ecserver
 
ecserver 的头像
 
 
注册会员  
  注册日期: Feb 2003
  我的住址: 广州
  帖子: 387
  精华: 2
 

被人杀?
来广州吧。







__________________
虚心学习,日有所得。

最方便的基于debian的发行版,自动检测硬件,启动window,8cm小DVD光盘可刻写,边上网边安装到硬盘。适合兄弟们使用的knoppix 5.01中文版正式提供下载(有抓图),欢迎试用。
http://www.linuxsir.org/bbs/showthread.php?t=265312
  ecserver 当前离线   回复时引用此帖
旧 06-01-15, 17:06 第 23 帖
minus273
 
minus273 的头像
 
 
初初初级会员  
  注册日期: Nov 2002
  我的住址: 天府之国四川 德阳
  帖子: 1,395
  精华: 7
 

unicode的fb终端,貌似从前有的...
unicon没用过,倒是超喜欢小字体的zhcon







__________________
“不知道,反正是平白无故就进来了。”
“不可能!平白无故——那都只判十年!”
-- Aleksandr Solženicyn
minus273 est novo Sandy.
Slackware碟子搞丢了,液氦倒了……
Homepage: www.minus273.eu
要不了多久,就该用了十年linux了。
  minus273 当前离线   回复时引用此帖
旧 06-01-15, 17:26 第 24 帖
minus273
 
minus273 的头像
 
 
初初初级会员  
  注册日期: Nov 2002
  我的住址: 天府之国四川 德阳
  帖子: 1,395
  精华: 7
 

哪天把zhcon做得像ucdos一样强大就好了……
  minus273 当前离线   回复时引用此帖
旧 06-01-16, 09:21 第 25 帖
wjping119
 
wjping119 的头像
 
 
注册会员  
  注册日期: Nov 2003
  我的住址: taiyuan
  帖子: 376
  精华: 2
 

cce支持utf-8啊,使用起来也不错。
不过没人维护很久了。
zhcon也没人维护。
有人来继续就不错。
  wjping119 当前离线   回复时引用此帖
旧 06-03-16, 14:10 第 26 帖
guoys
 
 
 
注册会员  
  注册日期: Nov 2003
  帖子: 119
  精华: 0
 

奇怪,我为什么没成功。。。。。
内核patch成功了,而且谨慎起见我一个个检查patch进去的代码,都加进去了。
内核配置也是按照楼主说的做,编译也成功了。
我的grub配置
代码:
title Gentoo Linux 2006.0 unicon root (hd0,1) kernel /boot/vmlinuz-unicon root=/dev/hda2 video=vesafb:mtrr,ywrap,1024x768-32@72 splash=silent,fadein,theme:emergence
做完下列操作后控制台并没显示中文
modprobe unikey
modprobe encode-gbk

setfont -C /dev/tty1 -u /usr/local/lib/unicon/direct.uni
setfont -C /dev/tty2 -u /usr/local/lib/unicon/direct.uni
setfont -C /dev/tty3 -u /usr/local/lib/unicon/direct.uni
setfont -C /dev/tty4 -u /usr/local/lib/unicon/direct.uni
setfont -C /dev/tty5 -u /usr/local/lib/unicon/direct.uni
setfont -C /dev/tty6 -u /usr/local/lib/unicon/direct.uni

但我执行unicon --gbk后,那个输入条出来了,输入条上也能显示中文,但其他地方的中文还是不能显示。

问题出在哪?
  guoys 当前离线   回复时引用此帖
旧 06-03-16, 14:11 第 27 帖
guoys
 
 
 
注册会员  
  注册日期: Nov 2003
  帖子: 119
  精华: 0
 

我的内核是2.6.15
  guoys 当前离线   回复时引用此帖
旧 06-03-17, 07:48 第 28 帖
hj_18
 
 
 
注册会员  
  注册日期: Jan 2003
  我的住址: 上海
  帖子: 947
  精华: 6
 

我还没试过2.6.15版本的,最近我倒是在考虑是不是可以让zhcon支持一下utf-8。
  hj_18 当前离线   回复时引用此帖
旧 06-03-21, 22:48 第 29 帖
kukukuan
 
 
 
注册会员  
  注册日期: Feb 2005
  帖子: 36
  精华: 0
 

2.6.15我已经成功打好补丁了,照hj18给的打补丁的办法做就好了
  kukukuan 当前离线   回复时引用此帖
旧 06-04-05, 20:47 第 30 帖
deevarvar
 
deevarvar 的头像
 
 
注册会员  
  注册日期: Mar 2005
  帖子: 48
  精华: 0
 

那个gmail用不了,谁能把下面三个
unicon-3.0.4-update.patch
unicon-kernel-20051125.patch
unicon-fonts.tar.gz
发到我的邮箱里:deevarvar@163.com
谢谢了
  deevarvar 当前离线   回复时引用此帖
发表新主题 回复


主题工具

发帖规则
您 [不可以] 发表新主题
您 [不可以] 回复主题
您 [不可以] 上传附件
您 [不可以] 编辑您的帖子

已 [启用] BB 代码
已 [启用] 表情符号
已 [启用] IMG 代码
已 [禁用] HTML 代码
[论坛跳转…]


所有时间均为[北京时间]。现在的时间是 00:53


Powered by vBulletin 版本 3.6.8
版权所有 ©2000 - 2012, Jelsoft Enterprises Ltd.
官方中文技术支持: vBulletin 中文
版权所有 ©2002 - 2011, LinuxSir.Org