Q001. Why is a kernel object (.o, .ko) not generated after compilation ?
A001. Check CONFIG_x, KConfig, and Makefile
2017年7月7日 星期五
2017年4月27日 星期四
ALSA
ALSA音频工具amixer,aplay,arecord
ALSA音频工具编译安装
========================================================================
1.官网http://www.alsa-project.org下载alsa-lib和alsa-utils
我的版本:alsa-lib-1.0.27.2.tar.bz2 和alsa-utils-1.0.27.2.tar.bz2
2.创建/home/m/3rd/alsa目录,并在目录下创建install目录,接着把压缩包拷到alsa目录下
3.编译alsa-lib步骤
tar -xvf alsa-lib-1.0.27.2.tar.bz2
cd alsa-lib-1.0.27.2
CC=arm-none-linux-gnueabi-gcc ./configure --host=arm-linux --prefix=/home/m/3rd/alsa/install/
make
make install
4.编译alsa-utils步骤
tar -xvf alsa-utils-1.0.27.2.tar.bz2
cd alsa-utils-1.0.27.2
CC=arm-none-linux-gnueabi-gcc ./configure --prefix=/home/m/3rd/alsa/install/ --host=arm-linux --with-alsa-inc-prefix=/home/m/3rd/alsa/install/include --with-alsa-prefix=/home/m/3rd/alsa/install/lib --disable-alsamixer --disable-xmlto --disable-nls
make
5.简单说明
--prefix指定了alsa-lib编译后的安装目录,包含库和头文件,编译alsa-utils时候要指明它的库lib和头文件include的目录.
alsamixer是图形化的amixer工具,需要ncurses的支持,在secure CRT中乱码,怕麻烦用--disable-alsamixer禁用了它.
--disable-xmlto和--disable-nls去掉编译都不通过,没去研究为啥.
aplay和arecord是同一个东东改下名字就可以了
1.官网http://www.alsa-project.org下载alsa-lib和alsa-utils
我的版本:alsa-lib-1.0.27.2.tar.bz2 和alsa-utils-1.0.27.2.tar.bz2
2.创建/home/m/3rd/alsa目录,并在目录下创建install目录,接着把压缩包拷到alsa目录下
3.编译alsa-lib步骤
tar -xvf alsa-lib-1.0.27.2.tar.bz2
cd alsa-lib-1.0.27.2
CC=arm-none-linux-gnueabi-gcc ./configure --host=arm-linux --prefix=/home/m/3rd/alsa/install/
make
make install
4.编译alsa-utils步骤
tar -xvf alsa-utils-1.0.27.2.tar.bz2
cd alsa-utils-1.0.27.2
CC=arm-none-linux-gnueabi-gcc ./configure --prefix=/home/m/3rd/alsa/install/ --host=arm-linux --with-alsa-inc-prefix=/home/m/3rd/alsa/install/include --with-alsa-prefix=/home/m/3rd/alsa/install/lib --disable-alsamixer --disable-xmlto --disable-nls
make
5.简单说明
--prefix指定了alsa-lib编译后的安装目录,包含库和头文件,编译alsa-utils时候要指明它的库lib和头文件include的目录.
alsamixer是图形化的amixer工具,需要ncurses的支持,在secure CRT中乱码,怕麻烦用--disable-alsamixer禁用了它.
--disable-xmlto和--disable-nls去掉编译都不通过,没去研究为啥.
aplay和arecord是同一个东东改下名字就可以了
if (strstr(argv[0], "arecord")) { stream = SND_PCM_STREAM_CAPTURE; file_type = FORMAT_WAVE; command = "arecord"; start_delay = 1; direction = stdout; } else if (strstr(argv[0], "aplay")) { stream = SND_PCM_STREAM_PLAYBACK; command = "aplay"; direction = stdin; } else { error(_("command should be named either arecord or aplay")); return 1; }
========================================================================
声音录制
======================================================================
arecord帮助提示信息

arecord -l列出声卡和数字音频设备

-D参数用于指定音频设备PCM
以hwx,x开头
根据上面l列出的设备,如果选择tvp5158来录制声音的话那么pcm设备就位hw0,0,如果是tlv320aic3x则pcm设备为hw0,1,sii9135则pcm设备为hw0,2。
声卡号,设备号
-r指定采样频率:5512/8000/11025/16000/22050/32000/44100/48000/64000/88200/96000/176400/192000
-f指定采样格式上面列出了:cd/cdr/dat/S16_LE/S32_LE/...
以hwx,x开头
根据上面l列出的设备,如果选择tvp5158来录制声音的话那么pcm设备就位hw0,0,如果是tlv320aic3x则pcm设备为hw0,1,sii9135则pcm设备为hw0,2。
声卡号,设备号
-r指定采样频率:5512/8000/11025/16000/22050/32000/44100/48000/64000/88200/96000/176400/192000
-f指定采样格式上面列出了:cd/cdr/dat/S16_LE/S32_LE/...
arecord -D default:CARD=mcasp0 -d 100000 -f cd -t raw mysong15.raw
arecord -D default:CARD=mcasp0 -d 100000 -f dat -t raw mysong10.raw
arecord -D default:CARD=mcasp0 -d 100000 -f S16_LE -r 16000 -t raw mysong10.raw
arecord -Dhw:0,1 -r8000 -f cd /a/1.wmv
arecord -Dhw:0,0 -r8000 -f S16_LE -c 2 /a/1.wmv
arecord -Dhw:0,2 -r48000 -f S32_LE -c 2 /a/1.wmv
arecord -D default:CARD=mcasp0 -d 100000 -f dat -t raw mysong10.raw
arecord -D default:CARD=mcasp0 -d 100000 -f S16_LE -r 16000 -t raw mysong10.raw
arecord -Dhw:0,1 -r8000 -f cd /a/1.wmv
arecord -Dhw:0,0 -r8000 -f S16_LE -c 2 /a/1.wmv
arecord -Dhw:0,2 -r48000 -f S32_LE -c 2 /a/1.wmv
========================================================================
声音播放
========================================================================
aplay帮助提示信息和aplay -l 列出声卡和数字音频设备
aplay帮助提示信息和aplay -l 列出声卡和数字音频设备

-D参数用于指定音频设备PCM
以hwx,x开头
根据上面l列出的设备,如果选择tlv320aic3x来播放声音的话那么pcm设备就位hw0,1,如果是hdmi则pcm设备为hw0,0。
声卡号,设备号
-r指定采样频率:5512/8000/11025/16000/22050/32000/44100/48000/64000/88200/96000/176400/192000
-f指定采样格式上面列出了:cd/cdr/dat/S16_LE/S32_LE/...
aplay -Dhw:0,1 -r8000 -f cd /a/1.wmv
aplay -Dhw:0,1 -r48000 -f cd /a/1.wmv
aplay -Dhw:0,1 -r48000 -f cd /a/1.wmv
arecord -Dhw:0,2 -r48000 -f S32_LE -c 2 | aplay -Dhw:0,1 -r48000//一边采集一边播放
========================================================================
========================================================================
简述amixer及其用法
alsamixer是Linux 音频架构ALSA中的Alsa工具的其中一个,用于配置音频的各个参数。
alsamixer是基于文本下的图形界面的,可以通过键盘的上下键,左右键等,很方便地设置需要的音量,开关某个switch(开关)等等操作。
amixer,是alsamixer的文本模式,即命令行模式,需要用amixer命令的形式去配置你的声卡的各个选项。
对于amixer的使用,你首先需要搞懂你要设置的参数是哪些,然后才可能去了解,如何去配置对应的值,整体来说,相对alsamixer来说,是有点繁琐,下面简要介绍其具体用法:
alsamixer是Linux 音频架构ALSA中的Alsa工具的其中一个,用于配置音频的各个参数。
alsamixer是基于文本下的图形界面的,可以通过键盘的上下键,左右键等,很方便地设置需要的音量,开关某个switch(开关)等等操作。
amixer,是alsamixer的文本模式,即命令行模式,需要用amixer命令的形式去配置你的声卡的各个选项。
对于amixer的使用,你首先需要搞懂你要设置的参数是哪些,然后才可能去了解,如何去配置对应的值,整体来说,相对alsamixer来说,是有点繁琐,下面简要介绍其具体用法:
1.查看amixer支持的命令
===================================================================
amixer -h

amixer -h

2.查看可使用的接口
===================================================================
再看看当前你的音频系统(不同的音频驱动对应不同的内容和操作接口)提供了那些供你使用的接口去操作
关于驱动里面已经提供了多少接口可以去操作,可以用命令:
amixer contents
查看,比如:
再看看当前你的音频系统(不同的音频驱动对应不同的内容和操作接口)提供了那些供你使用的接口去操作
关于驱动里面已经提供了多少接口可以去操作,可以用命令:
amixer contents
查看,比如:

========================================================================
3.如何去设置某个参数
3.如何去设置某个参数
========================================================================
总结起来就是,先要用get系列命令去看懂有哪些接口,然后再去用set系列的命令,去设置对应你所要设置的值。
总结起来就是,先要用get系列命令去看懂有哪些接口,然后再去用set系列的命令,去设置对应你所要设置的值。
查看获取某个设置项的值用amixer cget +控制参数
根据控制参数类型设置控制参数使用amixer cset +控制参数+" "+参数
根据控制参数类型设置控制参数使用amixer cset +控制参数+" "+参数
想要针对某项设置,比如想要设置上面的的主音量,master volume,即controls中显示的:
numid=5,iface=MIXER,name=’PCM Volume’
那么,可以先看看当前的值:
# amixer cget numid=5,iface=MIXER,name=’PCM Volume’
numid=5,iface=MIXER,name=’PCM Volume’
; type=INTEGER,access=rw—R–,values=2,min=0,max=27,step=0
: values=27,27
| dBscale-min=-40.50dB,step=1.50dB,mute=0
显示的是最大的27,假设想要设置为25,那么就用cset去设置:
# amixer cset numid=5,iface=MIXER,name=’PCM Volume’ 25
numid=5,iface=MIXER,name=’PCM Volume’
; type=INTEGER,access=rw—R–,values=2,min=0,max=27,step=0
: values=25,25
| dBscale-min=-40.50dB,step=1.50dB,mute=0
numid=5,iface=MIXER,name=’PCM Volume’
那么,可以先看看当前的值:
# amixer cget numid=5,iface=MIXER,name=’PCM Volume’
numid=5,iface=MIXER,name=’PCM Volume’
; type=INTEGER,access=rw—R–,values=2,min=0,max=27,step=0
: values=27,27
| dBscale-min=-40.50dB,step=1.50dB,mute=0
显示的是最大的27,假设想要设置为25,那么就用cset去设置:
# amixer cset numid=5,iface=MIXER,name=’PCM Volume’ 25
numid=5,iface=MIXER,name=’PCM Volume’
; type=INTEGER,access=rw—R–,values=2,min=0,max=27,step=0
: values=25,25
| dBscale-min=-40.50dB,step=1.50dB,mute=0
再比如,去将’Mic Supply 的switch关闭:
# amixer cset numid=12,iface=MIXER,name=’Mic Supply Switch’ Off
numid=12,iface=MIXER,name=’Mic Supply Switch’
; type=ENUMERATED,access=rw——,values=1,items=2
; Item #0 ‘On’
; Item #1 ‘Off’
: values=1
# amixer cset numid=12,iface=MIXER,name=’Mic Supply Switch’ Off
numid=12,iface=MIXER,name=’Mic Supply Switch’
; type=ENUMERATED,access=rw——,values=1,items=2
; Item #0 ‘On’
; Item #1 ‘Off’
: values=1
总结一下用法,就是:
amixer cget controls中所输出的某个参数
amixer cset controls中所输出的某个参数 具体的值(比如,0,1,On,Off等)
amixer cget controls中所输出的某个参数
amixer cset controls中所输出的某个参数 具体的值(比如,0,1,On,Off等)
【提示】
同上面介绍的的cget/cset系列命令:
controls show all controls for given card
contents show contents of all controls for given card
cset cID P set control contents for one control
cget cID get control contents for one control
同上面介绍的的cget/cset系列命令:
controls show all controls for given card
contents show contents of all controls for given card
cset cID P set control contents for one control
cget cID get control contents for one control
类似的,还有另外一套sget/sset系列的命令:
scontrols show all mixer simple controls
scontents show contents of all mixer simple controls (default command)
sset sID P set contents for one mixer simple control
sget sID get contents for one mixer simple control
也是同样做法,比如:
通过查看当然有哪些选择可以控制:
# amixer scontrols
Simple mixer control ‘Master’,0
Simple mixer control ‘Master Mode’,0
Simple mixer control ‘Master Mux’,0
Simple mixer control ‘Master Quality’,0
。。。
scontrols show all mixer simple controls
scontents show contents of all mixer simple controls (default command)
sset sID P set contents for one mixer simple control
sget sID get contents for one mixer simple control
也是同样做法,比如:
通过查看当然有哪些选择可以控制:
# amixer scontrols
Simple mixer control ‘Master’,0
Simple mixer control ‘Master Mode’,0
Simple mixer control ‘Master Mux’,0
Simple mixer control ‘Master Quality’,0
。。。
同理,amixer scontents,可以查看当前所有的值,具体就不在这列举了。
另外,去查看或者配置用sget,比如:
# amixer sget ‘Microphone Input’,0
Simple mixer control ‘Microphone Input’,0
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [off]
另外,去查看或者配置用sget,比如:
# amixer sget ‘Microphone Input’,0
Simple mixer control ‘Microphone Input’,0
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [off]
如果想要修改对应设置,用amixer sset ,具体用法是:
amixer sset sID(控制字符串) P(支持的某个值)
其中sID,就是上面的Simple mixer control后面的那个字符串,比如’Master Mux’,0
而对其设置就是,先看看其提供了哪些供你设置的值:
# amixer sget ‘Master Mux’,0
Simple mixer control ‘Master Mux’,0
Capabilities: enum
Items: ‘Sum’ ‘DAC’ ‘Line’ ‘Mic’
Item0: ‘DAC’
然后比如要设置成Line的,就可以这样:
# amixer sset ‘Master Mux’,0 Line
Simple mixer control ‘Master Mux’,0
Capabilities: enum
Items: ‘Sum’ ‘DAC’ ‘Line’ ‘Mic’
Item0: ‘Line’
amixer sset sID(控制字符串) P(支持的某个值)
其中sID,就是上面的Simple mixer control后面的那个字符串,比如’Master Mux’,0
而对其设置就是,先看看其提供了哪些供你设置的值:
# amixer sget ‘Master Mux’,0
Simple mixer control ‘Master Mux’,0
Capabilities: enum
Items: ‘Sum’ ‘DAC’ ‘Line’ ‘Mic’
Item0: ‘DAC’
然后比如要设置成Line的,就可以这样:
# amixer sset ‘Master Mux’,0 Line
Simple mixer control ‘Master Mux’,0
Capabilities: enum
Items: ‘Sum’ ‘DAC’ ‘Line’ ‘Mic’
Item0: ‘Line’
=======================================================================
amixer设置音量:
=======================================================================
1.设置声卡0左声道音量为200
amixer cset numid=6,iface=MIXER,name='L ADC VOLUME' 200
2.获取声卡0左声道音量值
root@dvr:~# amixer cget numid=6,iface=MIXER,name='L ADC VOLUME'
numid=6,iface=MIXER,name='L ADC VOLUME'
; type=INTEGER,access=rw------,values=1,min=0,max=255,step=0
: values=200
3.设置声卡0右声道音量为200
amixer cset numid=5,iface=MIXER,name='PCM Volume' 200
4.获取声卡0右声道音量值值
root@dvr:~# amixer cget numid=5,iface=MIXER,name='PCM Volume'
numid=5,iface=MIXER,name='R ADC VOLUME'
; type=INTEGER,access=rw------,values=1,min=0,max=255,step=0
: values=200
5.设置声卡1右声道音量为200
amixer -c 1 cset numid=5,iface=MIXER,name='PCM Volume' 200
6.获取声卡1右声道音量值
root@dvr:~# amixer -c 1 cget numid=5,iface=MIXER,name='PCM Volume'
numid=5,iface=MIXER,name='R ADC VOLUME'
; type=INTEGER,access=rw------,values=1,min=0,max=255,step=0
: values=200
7.设置声卡1左声道音量为200
amixer -c 1 cset numid=6,iface=MIXER,name='L ADC VOLUME' 200
8.获取声卡1左声道音量值
root@dvr:~# amixer -c 1 cget numid=6,iface=MIXER,name='L ADC VOLUME'
numid=6,iface=MIXER,name='L ADC VOLUME'
; type=INTEGER,access=rw------,values=1,min=0,max=255,step=0
: values=200
========================================================================
=======================================================================
1.设置声卡0左声道音量为200
amixer cset numid=6,iface=MIXER,name='L ADC VOLUME' 200
2.获取声卡0左声道音量值
root@dvr:~# amixer cget numid=6,iface=MIXER,name='L ADC VOLUME'
numid=6,iface=MIXER,name='L ADC VOLUME'
; type=INTEGER,access=rw------,values=1,min=0,max=255,step=0
: values=200
3.设置声卡0右声道音量为200
amixer cset numid=5,iface=MIXER,name='PCM Volume' 200
4.获取声卡0右声道音量值值
root@dvr:~# amixer cget numid=5,iface=MIXER,name='PCM Volume'
numid=5,iface=MIXER,name='R ADC VOLUME'
; type=INTEGER,access=rw------,values=1,min=0,max=255,step=0
: values=200
5.设置声卡1右声道音量为200
amixer -c 1 cset numid=5,iface=MIXER,name='PCM Volume' 200
6.获取声卡1右声道音量值
root@dvr:~# amixer -c 1 cget numid=5,iface=MIXER,name='PCM Volume'
numid=5,iface=MIXER,name='R ADC VOLUME'
; type=INTEGER,access=rw------,values=1,min=0,max=255,step=0
: values=200
7.设置声卡1左声道音量为200
amixer -c 1 cset numid=6,iface=MIXER,name='L ADC VOLUME' 200
8.获取声卡1左声道音量值
root@dvr:~# amixer -c 1 cget numid=6,iface=MIXER,name='L ADC VOLUME'
numid=6,iface=MIXER,name='L ADC VOLUME'
; type=INTEGER,access=rw------,values=1,min=0,max=255,step=0
: values=200
========================================================================
[Ubuntu] 網路設定 - 於 DHCP 環境下重新取得 IP
原文:http://note.drx.tw/2010/10/network-dhcp.html
正常而言,不管是插上網路線或者是連上無線網路時 X Window 都會自動尋找 DHCP Server 並自動取得 IP;若取得失敗,可透過簡單的指令重新跟 DHCP Server 討 IP,但前題是在同一個區網(LAN)裡有台 DHCP Server 才行。
在開始之前得先了解所謂的網路裝置代號,舉例來說,一般 PC 只有一張 Ethernet 網卡,那代號必為 eth0,而 Server 這種有第二張網卡的設備就會多了一個 eth1;但 Notebook 除了有線網路(eth0)以外,還會有張無線網卡,這時就可能為 wlan0 或 eth1,不確定的伙伴可以使用 ifconfig 指令來察看網卡相關資訊。
1. 有線網路:學術網路、IP 分享器、無線基地台。
2. 無線網路:無線基地台。
在開始之前得先了解所謂的網路裝置代號,舉例來說,一般 PC 只有一張 Ethernet 網卡,那代號必為 eth0,而 Server 這種有第二張網卡的設備就會多了一個 eth1;但 Notebook 除了有線網路(eth0)以外,還會有張無線網卡,這時就可能為 wlan0 或 eth1,不確定的伙伴可以使用 ifconfig 指令來察看網卡相關資訊。
1. 有線網路:學術網路、IP 分享器、
[ jonny@linux ~ ]
$ sudo dhclient eth0 Enter
2. 無線網路:無線基地台。
[ jonny@wheezy ~ ]
$ sudo dhclient wlan0 Enter
# 一般無線網卡的裝置代號為 wlan0 或 eth1。
[Ubuntu] NTP網路校時
原文:https://gavaee.wordpress.com/2010/10/27/ubuntuntp%E7%B6%B2%E8%B7%AF%E6%A0%A1%E6%99%82/
- 整理一下NTP Client,NTP Server建置及Linux有關時間的一些資料。
Linux與時間有關的指令
- /bin/date
顯示Linux系統日期及時間
# date MMDDhhmmYYYY
- /sbin/hwclock
這是一個 root 才能執行的指令,因為 Linux 系統上面 BIOS 時間與 Linux 系統時間是分開的,所以使用 date 這個指令調整了時間之後,還需要使用 hwclock 才能將修改過後的時間寫入 BIOS 當中!
# hwclock -r 顯示BIOS內的時間
# hwclock -w 將系統時間寫入BIOS
- /usr/share/zoneinfo
Linux系統提供的世界主要時區的時間設定檔,如:/usr/share/zoneinfo/Asia/Taipei即為台灣時時區檔
- /etc/localtime
Linux系統實際使用的時區檔,從/usr/share/zoneinfo內複製過來,所以若要變更時區,只要到…../zoneinfo內把需要的時區檔複到這裡並改名成localtime即可
NTP Client操作
- # sudo ntpdate time.stdtime.gov.tw
立即與time.stdtime.gov.tw校時,使用前須先停用ntpd
同步結果:
27 Oct 21:55:46 ntpdate[2683]: adjust time server 192.168.255.130 offset -0.023068 sec
- 校時後,建議執行hwclock -w
NTP Server操作
- 時間基本概念:
- GMT:格林威治時間為標準時間(Greenwich Mean Time, GMT 時間)
- UTC:協和標準時間(Coordinated Universal Time, UTC時間),用原子鐘(Atomic Clock)為基準所定義出來的正確時間
- UTC 標準時間是以 GMT 這個時區為主,所以本地時間與 UTC 時間的時差就是本地時間與 GMT 時間的時差
- 電腦的 BIOS 內部就含有一個原子鐘在紀錄與計算時間的進行!不過由於原子鐘主要是利用計算晶片 (crystal) 的原子震盪週期去計時的,且每種晶片都有自己的獨特的震盪週期,因為不同的晶片震盪週期多多少少都會有點差異性, 甚至同一批晶片也可能會或多或少有些許的差異(就連溫度也可能造成這樣的誤差呢!),因此也就造成了 BIOS 的時間會三不五時的給他快了幾秒或者慢了幾秒
- NTP Server基本概念:
- NTP Server使用Port 123 UDP封包,可用# netstat -tlunp觀察
- 台灣常見的 Time Server 有:
- tock.stdtime.gov.tw
- time.stdtime.gov.tw
- clock.stdtime.gov.tw
- freq_f.stdtime.gov.tw
- tick.stdtime.gov.tw
- NTP與DNS一樣有階層概念,第一層NTP Server叫stratum-1,第二層叫stratum-2依此類推,共可建立15層!
- 台灣stratum-2:
- tock.stdtime.gov.tw (prefer)
- tick.stdtime.gov.tw
- time.stdtime.gov.tw
- NTP Server套件
- ntp
NTP Server主要套件 - tzdata
時區套件
- ntp
- NTP 檔案:
- /etc/ntp.conf
NTP Server的設定檔 - /usr/sbin/ntpd
NTP Server主要daemon - /etc/init.d/ntp star/stop/restart
啟動NTP Service的Script - /usr/sbin/ntptrace
追蹤某部時間伺服器的時間對應關係
ntp.conf設定檔
- 主要內容
driftfile /var/lib/ntp/ntp.driftserver tock.stdtime.gov.tw prefer
server tick.stdtime.gov.tw
server time.stdtime.gov.tw
restrict default nomodify notrap noquery
restrict 192.168.100.11 <==底下這三行在開放主機進入的權限
restrict 192.168.200.11
restrict 192.168.210.11
restrict 127.0.0.1 mask 255.0.0.0 <==內部與 LAN 的使用權限
restrict 192.168.1.0 mask 255.255.255.0 nomodify <==192.168.1.0網段可校時,但不能修改
- driftfile /var/lib/ntp/ntp.drift
- 紀錄本機時間與上層NTP Server的時間差異(本機時間預設依據BIOS計算而來)
- driftfile 後面接的檔案需要使用完整路徑檔名
- 該檔案不能是連結檔
- 該檔案需要設定成 ntpd 這個 daemon 可以寫入的權限
- 該檔案所記錄的數值單位為:百萬分之一秒 (ppm)
- server [IP or hostname] [prefer]
- 設定上層 NTP 伺服器
- perfer 表示『優先使用』的主機
- restrict [你的IP] mask [netmask_IP] [parameter]
- 用restrict控制存取權限
- 參數:
- ignore
拒絕所有類型的 NTP 連線 - nomodify
用戶端不能更改 NTP 伺服器的時間參數,這即表示用戶端不能使用 ntpc 與 ntpq 這兩支程式來修改伺服器囉。 但用戶端仍可透過這部主機來進行網路校時的 - noquery
用戶端不能夠使用 ntpq, ntpc 等指令來查詢時間伺服器,等於不提供 NTP 的網路校時囉 - notrap
不提供 trap 這個遠端事件登錄 (remote event logging) 的功能 - notrust
拒絕沒有認證的用戶端 - 若沒有在 parameter 的地方加上任何參數的話,這表示『該 IP 或網段不受任何限制』的意思喔
- 通常會先關閉 NTP 的使用權限,然後在一個一個的啟用允許登入的網段
- restrict更多說明:ntpd access restrictions
- ignore
啟動/重開/停止NTP Server
- 啟動:# sudo /etc/init.d/ntp start
- 重開:# sudo /etc/init.d/ntp restart
- 停止:# sudo /etc/init.d/ntp stop
NTP指令
- # netstat -tlunp
主要看UDP 123的port
- # netstat
synchronised to NTP server (10.252.0.200) at stratum 3time correct to within 84 ms polling server every 1024 s 表示本機對10.252.0.200校時,校正了84 ms時間,每1024秒校正一次
- # ntptrace
localhost: stratum 3, offset -0.002099, synch distance 0.171925
tock.stdtime.gov.tw: stratum 2, offset 0.002473, synch distance 0.136901
192.5.41.41: stratum 1, offset 0.000005, synch distance 0.000000, refid ‘USNO’
列出目前我們的 NTP 伺服器與上層 NTP 伺服器彼此之間的關係
由於我們已經和第二層連接上,但第二層與第一層就不是我們能管理的,所以若出現第一層time out也是正常的
- # ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
*tock.stdtime.go 192.5.41.41 2 u 16 64 377 30.108 1.177 6.881
+tick.stdtime.go 129.6.15.29 2 u 14 64 377 31.045 -6.446 6.410
+time.stdtime.go 192.5.41.41 2 u 6 64 347 29.788 -1.144 8.233 列出目前我們的 NTP 與相關的上層 NTP 的狀態
- ntpq -p欄位定義
- remote:亦即是 NTP 主機的 IP 或主機名稱囉~注意最左邊的符號, 如果有『+』代表目前正在作用當中的上層 NTP ,如果是『*』代表也有連上線,不過是作為次要連線的 NTP 主機。
- refid:參考的上一層 NTP 主機的位址
- st:就是 stratum 階層囉!
- when:幾秒鐘前曾經做過時間同步化更新的動作;
- poll:下一次更新在幾秒鐘之後;
- reach:已經向上層 NTP 伺服器要求更新的次數
- delay:網路傳輸過程當中延遲的時間,單位為 10^(-6) 秒
- offset:時間補償的結果,單位與 10^(-3) 秒
- jitter:Linux 系統時間與 BIOS 硬體時間的差異時間, 單位為 10^(-6) 秒。
2017年2月28日 星期二
Python notebook
Debug tips:
- Print debug messages
2017年2月19日 星期日
Handbook - Linux
Q: Kill all process related to an application
A: use 'killall' command.
Q: Where is the core dumps ?
A: [Ubuntu12.04] /var/crash/
Q: How to pause (suspend) / resume current process ?
A: To pause (suspend) current process, press CTRL+Z
To resume it, use 'fg' command.
Q: How to show time (including year) of a file ?
A: ls --full-time
Q: How to show a file's creation time ?
A: stat
Q: How to update hardware time ?
A: "ntpdate pool.ntp.org" or "date --set "5 Aug 2012 12:54 IST"
and "hwclock --systohc --localtime"
# Truncate the file in-place starting a certain line.
sed -i '50001,$ d' filename
-i means in place.
d means delete.
50001,$ means the lines from 50001 to the end.
=======================================================================
GREP
=======================================================================
Q. How to grep multiple patterns/keyworks?
A. grep -E 'pattern1|pattern2' file
# Show lines containing any one of multiple keywords in a file 'foo.txt'
grep -e keyword1 -e keyword2 foo.txt
# Show lines containing 'keyword' in a file 'foo.txt'
grep keyword foo.txt
# Full (case sensitive) match
grep -w ""
# Show X lines before and Y lines after the line containing 'keyword' in a file 'foo.txt'
grep -B X -A Y keyword foo.txt
grep -C Z keyword foo.txt #when Z=Y=X
# Special characters.
grep '\$' # dollar sign
grep -P 'Modified\t' * # Tab
# Find line number of a specific text.
A: grep -nr 04:07: top_log
grep -n -E 'WNC|null pointer' tsu_all_20210202 > tsu_all_20210202.refine1
grep -v -E 'convertWNCsignalStrengthToRIL|SIGNAL_STRENGTH' tsu_all_20210202.refine1 > tsu_all_20210202.refine2
grep -n -E 'null pointer|Data Connection ESTABLISHED' tsu_all_20210202 > tsu_all_20210202.refine3
grep -n -E 'null pointer|SIGNAL_STRENGTH' tsu_all_20210202 > tsu_all_20210202.refine4
=========================================================================================
TAR
=========================================================================================
tar zcf foo.tgz foo/ --exclude .git
tar: ais9628_20180412_tmp-glibc/work/mdm9607-oe-linux-gnueabi/tftp-server/git-r1/pseudo/pseudo.socket: socket ignored
% mkdir /work/bkup/jane
% cd /home/jane % tar cf - . | (cd /work/bkup/jane && tar xBf -)A. grep -E 'pattern1|pattern2' file
=========================================================================================
Screen
=========================================================================================
Q. How to grep multiple patterns/keyworks?
[Process]
# List process of given executable
$ pgrep
[User account, group, permission]
# How do I find out what groups I belong to?
$ groups []
or
$ id -Gn []
# How to add a user to multiple groups?
$ usermod -a -G ftp,sudo,example geek[Date & Time]# Set date
date 010100002000.00#MMDDhhmmYYYY.ss Linux command to get time in milliseconds
bash - Linux command to get time in milliseconds - Stack Overflowdate +"%T.%N" returns the current time with nanoseconds.06:46:41.431857000date +"%T.%6N" returns the current time with nanoseconds rounded to the first 6 digits, which is microseconds.06:47:07.183172date +"%T.%3N" returns the current time with nanoseconds rounded to the first 3 digits, which is milliseconds.06:47:42.773
2017年2月6日 星期一
訂閱:
文章 (Atom)
