忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12下一页
最近访问板块 发新帖
查看: 2380 | 回复: 11

[内核入门] setup.S beep疑问? [复制链接]

论坛徽章:
9
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:12
发表于 2016-07-14 11:22 |显示全部楼层
arch/i386/boot/setup.S, line 197~208:
  1. prtchr:        pushw        %ax
  2.         pushw        %cx
  3.         xorb        %bh, %bh
  4.         movw        $0x01, %cx
  5.         movb        $0x0e, %ah
  6.         int        $0x10
  7.         popw        %cx
  8.         popw        %ax
  9.         ret

  10. beep:        movb        $0x07, %al
  11.         jmp        prtchr
复制代码
请问"beep:  movb $0x07, %al"这条指令是发出个声音吗?为什么将al设置成0x07后去调用int 0x10,int 0x10不是专门控制显示的吗,怎么声音也要它?

论坛徽章:
9
丑牛
日期:2014-09-06 00:12:55未羊
日期:2014-09-04 08:50:45辰龙
日期:2014-08-18 20:38:42寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
发表于 2016-07-14 15:22 |显示全部楼层
根据标准ASCII定义,输出007字符,代表要PC响铃。

ASCII表里定了很多非显示的符号,详情请看:
http://baike.baidu.com/item/ASCII

论坛徽章:
9
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:12
发表于 2016-07-14 15:39 |显示全部楼层
回复 2# Tinnal

,那么printf("%c\n", 7);为啥不响?显卡和声卡都“接收”到这个7了吗?

论坛徽章:
9
丑牛
日期:2014-09-06 00:12:55未羊
日期:2014-09-04 08:50:45辰龙
日期:2014-08-18 20:38:42寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
发表于 2016-07-14 23:14 |显示全部楼层
在我的Fedora环境能响呀,用你的的程序我自己试了一下,是OK的。。你也可以在终端按退格,或TAB键,电脑也会响,如果不想就是你的终端没有实现的了。因为这个字符是终端去处理的,PC的BIOS也能处理。


可以参考一下下面的连接:
http://www.linux.org/threads/ena ... r-system-beep.7944/
http://stackoverflow.com/questio ... ram-sounds-the-bell

论坛徽章:
9
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:12
发表于 2016-07-15 00:41 |显示全部楼层
回复 4# Tinnal

If that fails, then try inserting the "snd_pcsp" kernel module instead of the "pcspkr" module.
不知道是不是这个原因,我明天再试试噢。

论坛徽章:
18
程序设计版块每日发帖之星
日期:2015-08-17 06:20:0015-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:56黑曼巴
日期:2016-12-26 16:00:32每日论坛发贴之星
日期:2016-07-18 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:51程序设计版块每日发帖之星
日期:2016-06-03 06:20:00程序设计版块每日发帖之星
日期:2016-06-02 06:20:00程序设计版块每日发帖之星
日期:2016-05-30 06:20:00
发表于 2016-07-15 09:21 |显示全部楼层
好问题,还真没仔细想过……

跟终端有关系吧,比如ssh里面printf '\a',总不至于触发远程的server去beep一下吧?

论坛徽章:
18
程序设计版块每日发帖之星
日期:2015-08-17 06:20:0015-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:56黑曼巴
日期:2016-12-26 16:00:32每日论坛发贴之星
日期:2016-07-18 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:51程序设计版块每日发帖之星
日期:2016-06-03 06:20:00程序设计版块每日发帖之星
日期:2016-06-02 06:20:00程序设计版块每日发帖之星
日期:2016-05-30 06:20:00
发表于 2016-07-15 18:11 |显示全部楼层
1. 第一个层面,bash/readline库有bell-style选项,搜了一下bash的代码,
audible模式调用printf("\b"),而visible模式调用curses::tputs输出termcap的vb转义串(例如\e[?5h\e[?5l),
termcap的visual bell相当于terminfo的flash,也就是让屏幕闪一下。

2. 无论是\b还是escape串,通过vfs送入各种tty,
tty会有一个ldisc,缺省是N_TTY (存在其它ldisc,例如N_PPP),主要用来实现termios里定义的各种行为(例如回显,退格\b,raw/canonical模式的转换),
vfs_write -> tty_write -> tty.ldisc.ops.write -> N_TTY:write_chan -> tty.driver.write -> 分支为con_write/pty_write等。

对于/dev/ttyN, con_write -> do_con_write -> do_con_trol,对escape序列进行解释(使用一个状态机),
上述的5h和5l分别触发set_mode/invert_screen,造成屏幕的闪烁。

同样,在do_con_trol里,会调用kd_mksound,通过kbd子系统与各种输入设备产生关联,
典型的虚拟机会有at&t keyboad, pc speaker等input device,都有可能产生最终的beep。

论坛徽章:
9
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:12
发表于 2016-07-15 18:34 |显示全部楼层
回复 7# nswcfd

我对终端不了解,看不懂,总之就是跟bash和tty有关是吧?

论坛徽章:
18
程序设计版块每日发帖之星
日期:2015-08-17 06:20:0015-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:56黑曼巴
日期:2016-12-26 16:00:32每日论坛发贴之星
日期:2016-07-18 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:51程序设计版块每日发帖之星
日期:2016-06-03 06:20:00程序设计版块每日发帖之星
日期:2016-06-02 06:20:00程序设计版块每日发帖之星
日期:2016-05-30 06:20:00
发表于 2016-07-15 20:24 |显示全部楼层
对于pty的场景,则直接通过tty->link发送给ptm了,然后被app的sys_read获得。
* 如果是是远程ssh,则被sshd发送给登录的client,由client的软件负责回显\a。*
* 如果是本地ssh,sshd发送给ssh,ssh发送给当前终端,又回到了楼上con_write的情况。

论坛徽章:
9
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:12
发表于 2016-07-16 13:40 |显示全部楼层
回复 9# nswcfd

您需要登录后才可以回帖 登录 | 注册

本版积分规则

SACC2017购票8.8折优惠进行时

2017中国系统架构师大会(SACC2017)将于10月19-21日在北京新云南皇冠假日酒店震撼来袭。今年,大会以“云智未来”为主题,云集国内外顶级专家,围绕云计算、人工智能、大数据、移动互联网、产业应用等热点领域展开技术探讨与交流。本届大会共设置2大主会场,18个技术专场;邀请来自互联网、金融、制造业、电商等多个领域,100余位技术专家及行业领袖来分享他们的经验;并将吸引4000+人次的系统运维、架构师及IT决策人士参会,为他们提供最具价值的交流平台。
----------------------------------------
优惠时间:2017年8月2日前

活动链接>>
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP