-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsearch.xml
256 lines (256 loc) · 143 KB
/
search.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title><![CDATA[centos-note]]></title>
<url>%2Fblogs%2Fcentos-note%2F</url>
<content type="text"><![CDATA[包含了一个 setup 命令,可以配置系统的东西同时还有 systemd 命令还有一组 system 的命令可以对系统进行配置。 centos7 使用 systemctl 来代替 ckconfig 与 service 。systemctl [start|stop|status|enable|disable|restart….] 具体查看帮助文件 CentOS Installation制作 U 盘启动给小黑安装CentOS 7的时候,遇到了很多问题,主要是使用UltraISO刻录的启动盘,在安装的过程中使用找不到磁盘,在网上找了很久,终于搞定了,做此笔记记录一下。 前提假设你有CentOS-7-x86_64-DVD-1611.iso 文件和一个大容量U盘(我的是32G),在其他linux系统中,你的U盘被挂载在/dev/sdb上 步骤使用如下命令就可以将CentOS 7的系统刻录到U盘上 1dd if=CentOS-7-x86_64-DVD-1611.iso of=/dev/sdb1 使用下面的命令查看 dd 的进展1watch -n 5 pkill -USR1 ^dd$ (ps: 切记此处的输出设备一定是整个U盘整体,而非该U盘上的某个分区如/dev/sdb1)然后就可以使用该U盘启动,进行系统安装了。 U 盘格式恢复(分区格式有 MBR 或者 GTP,MBR 一般是 Windows 下的,现在比较新的使用了 GPT 分区格式,同时需要 BIOS 使用 UEFI 进行 boot )由于经过 dd 命令进行制作之后,U 盘已经被分区了,有可能分区格式不是使用 MBR 格式,所以在 Windows 下找不着。可以使用 mkfs.ntfs -I /dev/sdb 来将 U 盘重新格式化(使用 ntfs 的文件系统,前提是你得先安装 ntfsprogs )可以使用 mkfs.vfat -I /dev/sdb 来将 U 盘重新格式化(使用 fat32 的文件系统) 下面是一些其他命令123456fdisk -l # 查看当前磁盘情况vgscan # 扫描卷组vgdisplay # 查看卷组lvscan # 扫描逻辑卷vgchange -ay /dev/VolGroup00 # 激活卷组 (把 /dev/xxx 改为你对应的)mkfs -t vfat -I /dev/sdb # 格式化 (把 /dev/xxx 改为你对应的 U 盘或者其他磁盘) 输入法问题问题描述很久以前,可能是我重装过一次 ibus 拼音输入法或者是装过其它的输入法,之后把它卸载了。总之而言,经过我的乱搞后,成功地使我的电脑出现了一个神奇的问题:每次重启电脑或者账户重新登录,我的 ibus 拼音输入法就会无效,具体表现为桌面图标显示了“中”字,但是任何输入窗口下都只能输入英文,按 Shift 也无法在 ibus 拼音输入法的中英文模式之间切换。这并不代表我不能输入中文,一个可笑的解决办法就是我进入设置——区域和语言,把拼音输入法删除,然后再添加,这样以来就能正常使用 ibus 拼音输入法了。然而下次重启或者重新登录后,对不起,问题依旧,需要再次重复以上操作。 解决方案我为这个问题苦恼不已,在网上查了很久也没找到合适的方法,ibus, ibus-libpinyin 不知重装了多少次,基本每次打开我的 CentOS,我都会先搜索一波重启后拼音输入法无效的问题,折腾一会儿失败了,然后在需要输入中文的时候又迫不得已地打开了设置…… 终于在今天,我一如往常地想要努力一把,搜索的具体内容已经变了很多,这次我输入的大概是“CentOS 默认输入法”,我打开一篇“centos7.3安装fcitx输入法设置为默认拼音输入法”。发现了一个我从未遇到过的“im-chooser”,按照教程走下来,将 ibus 设为默认输入法。然后再重新登录之后,我惊喜地发现 ibus 拼音输入法可以正常使用了!重启电脑之后,也可以输入中文! 懂 Linux 的人也许会笑我,连 im-chooser 都不知道,这么简单的问题竟然这么长时间都搞不定。小弟的确很菜,但我还是为自己能够解决掉自己的问题而高兴,下面贴出我参考教程所作的详细步骤: 回到当前使用的普通用户,设置 ibus 输入法为默认输入系统:12sudo yum install im-chooserimsettings-switch ibus 然后注销一次用户重新登录命令就仅仅需要以上两步,重新登录以后,ibus 的拼音输入法就可以正常使用了。解决方案也很简单,可以说没有技术含量。 troubleshootCentOS 6.x 版本的,yum 使用了 python2 。所以不可以卸载 python2。同时安装pythone3 后,python 命令还是指向 python2 的。此处不宜使用暴力修改(网络上许多人都说,修改 /usr/bin/yum 来实现 python3)。 chkconfig:chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。 语法: chkconfig –list [name] chkconfig –add name chkconfig –del name chkconfig [–level levels] name <on|off|reset> chkconfig [–level levels] name chkconfig 没有参数运行时,显示用法。如果加上服务名,那么就检查这个服务是否在当前运行级启动。如果是,返回true,否则返回false。如果在服务名后面指定了on,off或者reset,那么chkconfi 会改变指定服务的启动信息。on和off分别指服务被启动和停止,reset指重置服务的启动信息,无论有问题的初始化脚本指定了什么。on和off开关,系统默认只对运行级3,4,5有效,但是reset可以对所有运行级有效。 --level选项可以指定要查看的运行级而不一定是当前运行级。 需要说明的是,对于每个运行级,只能有一个启动脚本或者停止脚本。当切换运行级时,init不会重新启动已经启动的服务,也不会再次去停止已经停止的服务。 chkconfig --list :显示所有运行级系统服务的运行状态信息(on或off)。如果指定了name,那么只显示指定的服务在不同运行级的状态。 chkconfig --add name:增加一项新的服务。chkconfig确保每个运行级有一项启动(S)或者杀死(K)入口。如有缺少,则会从缺省的init脚本自动建立。 chkconfig --del name:删除服务,并把相关符号连接从/etc/rc[0-6].d删除。 chkconfig [--level levels] name <on|off|reset>:设置某一服务在指定的运行级是被启动,停止还是重置。例如,要在3,4,5运行级停止nfs服务,则命令如下: chkconfig --level 345 nfs off 运行级文件: 每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释。第一行告诉chkconfig缺省启动的运行级以及启动和停止的优先级。如果某服务缺省不在任何运行级启动,那么使用 - 代替运行级。第二行对服务进行描述,可以用\ 跨行注释。例如,random.init包含三行: chkconfig: 2345 20 80description: Saves and restores system entropy pool for \higher quality random number generation.附加介绍一下Linux系统的运行级的概念: Linux中有多种运行级,常见的就是多用户的2,3,4,5 ,很多人知道5是运行X-Windows的级别,而0就是关机了。运行级的改变可以通过init命令来切换。例如,假设你要维护系统进入单用户状态,那么,可以使用init1来切换。在Linux的运行级的切换过程中,系统会自动寻找对应运行级的目录/etc/rc[0-6].d下的K和S开头的文件,按后面的数字顺序,执行这些脚本。对这些脚本的维护,是很繁琐的一件事情,Linux提供了chkconfig命令用来更新和查询不同运行级上的系统服务。]]></content>
<categories>
<category>System</category>
<category>linux</category>
</categories>
<tags>
<tag>linux</tag>
<tag>centos</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Formality 工具]]></title>
<url>%2Fblogs%2Fasic-formality%2F</url>
<content type="text"><![CDATA[别人的一、 总结: 解决dc综合出现fail点的基本思路: set synopsys_auto_setup true,记得undriven的选项单独再设置一下,undriven要识别成不定态x,对设计验证更充分。 set_svf,能更好的进行name_rule匹配,门控匹配等等。 dft_mode/test_mode/bypass_mode等,要设置为常值,只检查正常工作模式。因为这几个测试模式,设计主要依赖后端团队;pre-gate步骤不需要关心。 dc设置的set_case_analysis,要都设置在formality里。因为当前formality的主要意义,是检查综合步骤的正确性。 出现failing point,第一步骤是依赖formality工具的analysis功能;会有基本分类,有些分类,一眼就能看出问题原因,比如undriven导致的比较失败。这一步骤,只解决简单的问题。 pattern视角分析。留意c0/c1/und关键词。留意reference/implement两栏中,有一栏是空的电路逻辑图。 电路逻辑图,结合pattern一起分析,debug更有效果。 另外,综合前,做nLint静态代码检查,是很有必要的。formality检查之前,看综合日志也是很有必要的。流程完整,可以节省很多不必要的debug时间。二、 netlist和svf的配套一致 gpu当前的综合过程是 底层IP先综合成网表; gpu_top_wrapper,吃底层IP的网表进行的顶层综合。 formality对应的,应是这样的步骤 底层IP formality,吃IP综合的svf。比较的是ip-rtl和ip-netlist 顶层formality,吃底层IP综合的ip-netlist。比较的是(顶层-rtl+底层ip-netlist)和gpu_top_wrapper-netlist之前是(顶层-rtl+底层ip-rtl)和gpu_top_wrapper-netlist。这种方法,比较出来的结果是大量不匹配;原因估计是svf文件无法对应,因为gpu顶层吃的是底层IP网表。三、 formality遇到的坑 set verification_clock_gate_hold_mode collapse_all_cg_cells【解决clock gating问题】 set synopsys_auto_setup true【结合svf,更大限度的减少不必要的比对。】 以上两点,在set_svf命令之前设置。 因为formality验证,主要是应用于检查综合结果质量。如果综合过程中遇到set_case_analysis的设置,就需要在formality里设置相应端口为固定值。 四、 pattern match视角 pattern是指出现fail point的比较码; 留意c0/c1、und这样的关键词,是constant常值0、1、undriven的意思。 先解决undriven 五、 IP/IO/standcell的处理 按照综合流程的吃法,都吃.lib即可。 尽量不用blackbox;blackbox,因为输入输出端口的原因,经常给formality检查带来不必要的困难麻烦。 undriven nets一般的,设计中只要存在undriven(除inout IO、dft port),都需要在设计上修改,设计上不允许存在undriven。同时dc工具默认的是,只要存在undriven point,最后的网表都是会接0处理的。 解决方法:fm有一个系统变量verification_set_undriven_signals,如果你认为设计中存在的这些undriven points是你们期望的,那么该变量设置为synthesis即可;一般的是设置为默认值binary:x,这样设置就是为了确保一旦存在undriven point,fm的结果就会fail。 Formality Ultra这个 feature 默认是没有打开的,这个 feature 需要 license 支持。通过 get_license FormalityUltra 就可以打开]]></content>
<categories>
<category>ASIC</category>
</categories>
<tags>
<tag>formality</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Linux 编译 Win32 的 VLC]]></title>
<url>%2Fblogs%2Fcompile-vlc%2F</url>
<content type="text"><![CDATA[VLC : 3.0.6准备 OS : Ubuntu 18.10 amd64 desktop minimal ,meson 要求比较新的版本 Software & Update 更换一下源,同时勾选 “source xxxxx” https://forum.videolan.org/viewtopic.php?t=143536 系统自带的 mingw 是 7.3 ,还是有 bug ,所以我们只能手动安装个 mingw 8 https://packages.debian.org/ 下载 mingw 8 12345678910binutils-mingw-w64-i686_2.31.1-11+8.3_amd64.debbinutils-mingw-w64-x86-64_2.31.1-11+8.3_amd64.debg++-mingw-w64-i686_8.2.0-21+21.1_amd64.debg++-mingw-w64-x86-64_8.2.0-21+21.1_amd64.debgcc-mingw-w64-base_8.2.0-21+21.1_amd64.debgcc-mingw-w64-i686_8.2.0-21+21.1_amd64.debgcc-mingw-w64-x86-64_8.2.0-21+21.1_amd64.debmingw-w64-common_6.0.0-3_all.debmingw-w64-tools_6.0.0-3_amd64.debmingw-w64-x86-64-dev_6.0.0-3_all.deb 1234567891011121314151617181920sudo apt -y updatesudo apt -y dist-upgradesudo apt -y build-dep vlc --fix-missingsudo apt install -y build-essentialsudo apt install -y --fix-missing \ lua5.2 liblua5.2-dev libtool automake autoconf autopoint make gettext pkg-config \ qt5-default git subversion cmake cvs \ wine64-development-tools libwine-dev zip p7zip nsis bzip2 \ yasm ragel ant openjdk-8-jdk default-jdk protobuf-compiler dos2unix \ gperf flex bison liborc-0.4-dev \ libltdl-dev meson nasm# 切换到 java8sudo update-alternatives --config javasudo update-alternatives --config javac# 下载对应版本的 VCL 源代码curl -R -O ftp://ftp.videolan.org/pub/vlc/3.0.6/vlc-3.0.6.tar.xz && tar -Jxf vlc-3.0.6.tar.xzmkdir -p "vlc-3.0.6/share/hrtfs/" # 或者直接到下载最新的源代码,将 hrtfs 文件夹拷贝进去。防止 make package-win-common 时出错 编译脚本代码1234567891011121314151617cd vlc-3.0.6HOST_TRIPLET=x86_64-w64-mingw32mkdir -p contrib/win64 && cd contrib/win64make mostlyclean../bootstrap --host=${HOST_TRIPLET}make fetch-all && make -j4cd -PKG_CONFIG_LIBDIR="`pwd`/contrib/${HOST_TRIPLET}/lib/pkgconfig"mkdir -p win64 && cd win64make uninstallmake distcleancd - && ./bootstrap && cd -../configure --host=${HOST_TRIPLET} --build=x86_64-pc-linux-gnu \ --disable-chromecast \&& make -j4 && make package-win-common -j4 versioninfo.rc 错误:12345678910i686-w64-mingw32-windres: versioninfo.rc.in:21: syntax errori686-w64-mingw32-windres: preprocessing failed.Makefile:1224: recipe for target 'versioninfo.lo' failedmake[2]: *** [versioninfo.lo] Error 1make[2]: Leaving directory '/home/d/vlc-3.0.0/contrib/win32/gcrypt/src'Makefile:487: recipe for target 'install-recursive' failedmake[1]: *** [install-recursive] Error 1make[1]: Leaving directory '/home/d/vlc-3.0.0/contrib/win32/gcrypt'../../contrib/src/gcrypt/rules.mak:72: recipe for target '.gcrypt' failedmake: *** [.gcrypt] Error 2 解决方案: 修改 contrib/win32/gcrypt/configure.ac 第42行 修改前:m4_esyscmd([git rev-parse –short HEAD | tr -d ‘\n\r’]))修改后:m4_esyscmd([printf %x $(wc -l < debian/changelog)])) 缺少 libssp-0.dll随便上网找个 windows 的 dll 。将其放入编译出来的vlc-3.0.6 文件夹中。 VLC : 3.0.3 (失败告终) HOST_TRIPLET : x86_64-w64-mingw32 运行官网教程中的 Static compilation of plugins,我将其写入一个名为:vlc.sh 的脚本中。- You might want to use the following script to enforce static compilation. Run as root, and use at your own risk. 官网教程提醒版本要对应,ubuntu1804 使用的的版本为 5.0.3,应该还是可以的。 NB: you need mingw-w64 version 5.0.1 to compile it. 第三方库尝试过使用 vlc-contrib-x86_64-w64-mingw32-20171209.tar.bz2 进行编译,会提示一堆的错误(2018-07-12)。 官网教程提醒,所以只能手动 build 第三方的库了。 At the time of writing (late 2016), the prebuilt libraries work with VLC 2.2.x only. To compile the VLC 3.0.x development branch, DO NOT USE the prebuilt libraries. 自己 build 的库,似乎比较少,可能是因为这样子,才导致后面出现了一堆错误。 VDPAU 出错IMHO x11/VDPAU shouldn’t be checked to begin with when compiling for win32/win641sudo apt-get remove -y libvdpau-dev 提示schroedinger出错download schroedinger_1.0.11.orig.tar.gz12345tar -zxf schroedinger_1.0.11.orig.tar.gzcd schroedinger_1.0.11./configure --prefix=/usrmakesudo make install make 时提示看不到 idna.h 文件无解,坐吃等死。 VLC : 2.2.8 HOST_TRIPLET : i686-w64-mingw32 apt install -y "qt4-default": 1234567891011121314151617181920cd vlcmkdir -p contrib/win32 && cd contrib/win32curl -R -O ftp://ftp.videolan.org/pub/videolan/contrib/i686-w64-mingw32/vlc-contrib-i686-w64-mingw32-20160218.tar.bz2mv vlc-contrib-i686-w64-mingw32-20160218.tar.bz2 vlc-contrib-i686-w64-mingw32-latest.tar.bz2make cleanmake distclean../bootstrap --host=${HOST_TRIPLET}make prebuiltrm -f ../i686-w64-mingw32/bin/moc ../i686-w64-mingw32/bin/uic ../i686-w64-mingw32/bin/rcccd -./bootstrapmkdir -p win32 && cd win32make uninstallmake cleanmake distcleanPKG_CONFIG_LIBDIR=$HOME/tmp/vlc/vlc/contrib/${HOST_TRIPLET}/lib/pkgconfig \../extras/package/win32/configure.sh --host=${HOST_TRIPLET} --build=x86_64-pc-linux-gnu \--disable-mkvmakemake package-win-common 懂得的东西 configure 失败之后,再次重新 configure 时,最好 make distclean 一下。 toolchain 很重要,版本的应对对于编译影响比较大 Cross Compiling 用的 LIB 一般是与系统不同的,虽然很可能是同名字,但架构不一样,库也不一样。 Cross Compiling 在 configure 时,必须通过 PKG_CONFIG_LIBDIR 指定目标架构的库文件。 相关连接 https://wiki.videolan.org/Win32Compile/ https://wiki.videolan.org/VLC_configure_help https://trac.videolan.org/vlc/ticket/18609 https://wiki.videolan.org/Contrib_Status ftp://ftp.videolan.org/pub/videolan https://packages.ubuntu.com/ https://packages.debian.org/ https://higoge.github.io/2015/07/17/sm02/ https://forum.videolan.org/viewtopic.php?t=143536 https://github.com/videolan/vlc]]></content>
<categories>
<category>Tools</category>
<category>vlc</category>
</categories>
<tags>
<tag>linux</tag>
<tag>ubuntu</tag>
<tag>vlc</tag>
<tag>cross compiling</tag>
</tags>
</entry>
<entry>
<title><![CDATA[what-is-life]]></title>
<url>%2Fblogs%2Fwhat-is-life%2F</url>
<content type="text"><![CDATA[给岁月以文明,而不是给文明以岁月——《三体II 黑暗森林》 人生目标人,总得有个可以一生追求的目标。什么才是你内心真正想去追求的呢?内心很安静,没有给出答复。]]></content>
</entry>
<entry>
<title><![CDATA[gcc-note]]></title>
<url>%2Fblogs%2Fgcc-note%2F</url>
<content type="text"><![CDATA[源码编译 gcchttps://www.vultr.com/docs/how-to-install-gcc-on-centos-6https://www.dwhd.org/20170517_083340.html yum install libmpc-devel mpfr-devel gmp-devel zlib-devel cmakeyum install svn texinfo-tex flex zip libgcc.i686 glibc-devel.i686 在 source 文件中,使用ldconfig命令,可以检查 dll 的配置。 俄罗斯或者日本的 mirror 会快许多,linux 下可以使用 md5sum 对下载下来的文件进行校验!12http://gcc.gnu.org/install/http://mirror.linux-ia64.org/gnu/gcc/infrastructure/ 3.1. 解压 gcc-4.9.0.tar.gz得到目录 gcc-4.9.0,进入目录 #tar -xvzf gcc-4.9.0.tar.gz #cd gcc-4.9.0 3.2. 下载编译准备文件主要是需要下面的库文件(需要完整版本,下载全部文件)MPFR=mpfr-2.4.2GMP=gmp-4.3.2MPC=mpc-0.8.1ISL=isl-0.12.2CLOOG=cloog-0.18.1执行12./contrib/download_prerequisitessudo ldconfg 如果编译机器不能上网,直接打开文本文件 download_prerequisites,把里面依赖的库下载回来后,放在指定目录,然后注释下载命令,再次执行contrib/download_prerequisites,把相关文件解压,并建立链接。1vi contrib/download_prerequisites 注释 wget 相关的内容,手动把这些文件下载回来,拷贝到工作目录 gcc-4.9.0下。1./contrib/download_prerequisites 3.3. 创建编译目录并编译安装指定编译语言会比较好,这样make会更容易通过。123mkdir ../gcc-build-4.9.0cd ../gcc-build-4.9.0../gcc-4.9.0/configure --prefix=/usr/local/gcc-4.9.0 --enable-stage1-checking=release --enable-stage1-languages=c,c++ or (建议使用下面的配置)1../gcc-4.9.0/configure --prefix=/usr/local/gcc-4.9.0 --with-system-zlib --disable-multilib --enable-languages=c,c++,java 一定要检查一下 config.log 是否有出错!!!通过检查 config.log。可以看到上一个 gcc 采用的 config 配置1Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux 123yum install -y flex texinfomake -j4make install make -j$(getconf _NPROCESSORS_ONLN) && make install 编译后安装到 /usr/local/gcc-4.9.0 3.4. 验证安装 #cd /usr/local/gcc-4.9.0 #./bin/gcc -v看到版本信息]]></content>
<categories>
<category>Tools</category>
<category>gcc</category>
</categories>
<tags>
<tag>gcc</tag>
<tag>compiler</tag>
</tags>
</entry>
<entry>
<title><![CDATA[nvdla 研究]]></title>
<url>%2Fblogs%2Fnvdla%2F</url>
<content type="text"><![CDATA[前言Dependencesystemc-2.3.0a(注意不是https://github.com/systemc/systemc-2.3,这个太旧)gcc-4.9.3以上 123456789$ wget -O systemc-2.3.0a.tar.gz http://www.accellera.org/images/downloads/standards/systemc/systemc-2.3.0a.tar.gz$ tar -xzvf systemc-2.3.0a.tar.gz$ cd systemc-2.3.0a$ sudo mkdir -p /usr/local/systemc-2.3.0a/$ mkdir objdir$ cd objdir$ ../configure --prefix=/usr/local/systemc-2.3.0a$ make$ sudo make install http://msyksphinz.hatenablog.com/?page=1511362800 sim使用 VCS 进行仿真修改 synth_tb/tb_top.v 中的 dump vcd 的等级 1234$ cd xxx/hw/verif/sim$ make build$ make run TESTDIR=../traces/traceplayer/sanity0 $ makde dve TESTDIR=../traces/traceplayer/sanity0 FPGAsomething]]></content>
<categories>
<category>System</category>
<category>linux</category>
</categories>
<tags>
<tag>AI</tag>
<tag>nvdla</tag>
</tags>
</entry>
<entry>
<title><![CDATA[linux-note]]></title>
<url>%2Fblogs%2Flinux-note%2F</url>
<content type="text"><![CDATA[前言目前使用到的 Linux 系统主要是 ubuntu 与 centos 系统。 系统 发行版本 command 内核版本、位数 RedHat cat /etc/issue cat /etc/redhat-release lsb_release -a CentOS cat /etc/issue cat /etc/centos-release cat /proc/version Debian cat /etc/issue cat /etc/debian_version cat /proc/version Ubuntu cat /etc/issue cat /etc/lsb_release cat /proc/version Oracle cat /etc/issue cat /etc/oracle-release lsb_release -a Perl 相关安装到 local要设置以下几个环境变量12345PATHMANPATHLD_LIBRARY_PATHC_INCLUDE_PATHLIBRARY_PATH 关于login/interactive/no-interactive shell和profile/bash_profile/bashrclogin shell:第一次登录进系统时的shell,一般是指本机启动时的控制台shell或者ssh远程登录时的shell。 interactive shell:登录以后,再打开控制台时运行的shell。 none interactive shell:只是用来执行脚本的shell,执行完就结束进程了,没有用户交互过程。 mac有个特殊地方:每次打开一个终端都是一个login shell。 使用shell的执行选项上一节所述的调试手段是通过修改shell脚本的源代码,令其输出相关的调试信息来定位错误的,那有没有不修改源代码来调试shell脚本的方法呢?答案 就是使用shell的执行选项,本节将介绍一些常用选项的用法: -n 只读取shell脚本,但不实际执行-x 进入跟踪方式,显示所执行的每一条命令-c “string” 从strings中读取命令 “-n”可用于测试shell脚本是否存在语法错误,但不会实际执行命令。在shell脚本编写完成之后,实际执行之前,首先使用“-n”选项来测试脚本 是否存在语法错误是一个很好的习惯。因为某些shell脚本在执行时会对系统环境产生影响,比如生成或移动文件等,如果在实际执行才发现语法错误,您不得 不手工做一些系统环境的恢复工作才能继续测试这个脚本。“-c”选项使shell解释器从一个字符串中而不是从一个文件中读取并执行shell命令。当需要临时测试一小段脚本的执行结果时,可以使用这个选项, 如下所示:sh -c ‘a=1;b=2;let c=$a+$b;echo “c=$c”‘“-x”选项可用来跟踪脚本的执行,是调试shell脚本的强有力工具。“-x”选项使shell在执行脚本的过程中把它实际执行的每一个命令行显示出 来,并且在行首显示一个”+”号。 “+”号后面显示的是经过了变量替换之后的命令行的内容,有助于分析实际执行的是什么命令。 “-x”选项使用起来简单方便,可以轻松对付大多数的shell调试任务,应把其当作首选的调试手段。 umask在linux中,常常都要提示设置: umask 022 其作用如下: 功能说明:指定在建立文件时预设的权限掩码。语 法:umask [-S][权限掩码]补充说明:umask可用来设定[权限掩码]。[权限掩码]是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。参 数:-S 以文字的方式来表示权限掩码。文件:用八进制基数666,即无x位(可执行位)rw- rw- rw-.执行位需由用户自行加入 例一:设要生成的文件以rw- r– r–这样的权限字出现,即真实权限用八进制表示为644,则被666基数减得022,022即掩码。使用umask 022。 注:033效果与022一样,假设使用033掩码进行设置,则真实权限应为633即rw- r-x r-x ,但前提规定文件不生成x位,所以文件的权限最终将以rw-r–r–出现。 目录:用八进制基数777 例二:设要生成的目录权限以rwxr-xr-x这样的权限字出现,即真实权限用八进制表示为755,则被基数为777的权限字相减后,得掩码022。则使用umask 022进行设置。 总结: 掌握二个要点,一、文件基数为666,目录为777,即文件无设x位,目录可设x位。二、chmod是设哪个位,哪么哪个位就有权限,而umask是设哪个位,则哪个位上就没权限。 ssh1ssh-keygen -t rsa -b 4096 -C "[email protected]" https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/ linux ssh_config和sshd_config配置文件 ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于,前者是针对客户端的配置文件,后者则是针对服务端的配置文件。两个配置文件都允许你通过设置不同的选项来改变客户端程序的运行方式。下面列出来的是两个配置文件中最重要的一些关键词,每一行为“关键词&值”的形式,其中“关键词”是忽略大小写的。1、编辑 /etc/ssh/ssh_config 文件 Site-wide defaults for various options Host * ForwardAgent no ForwardX11 no RhostsAuthentication no RhostsRSAAuthentication no RSAAuthentication yes PasswordAuthentication yes FallBackToRsh no UseRsh no BatchMode no CheckHostIP yes StrictHostKeyChecking no IdentityFile ~/.ssh/identity Port 22 Cipher blowfish EscapeChar ~ 下面对上述选项参数逐进行解释: Site-wide defaults for various options带“#”表示该句为注释不起作,该句不属于配置文件原文,意在说明下面选项均为系统初始默认的选项。说明一下,实际配置文件中也有很多选项前面加有“#”注释,虽然表示不起作用,其实是说明此为系统默认的初始化设置。Host “Host”只对匹配后面字串的计算机有效,“”表示所有的计算机。从该项格式前置一些可以看出,这是一个类似于全局的选项,表示下面缩进的选项都适用于该设置,可以指定某计算机替换*号使下面选项只针对该算机器生效。ForwardAgent no“ForwardAgent”设置连接是否经过验证代理(如果存在)转发给远程计算机。ForwardX11 no“ForwardX11”设置X11连接是否被自动重定向到安全的通道和显示集(DISPLAY set)。RhostsAuthentication no“RhostsAuthentication”设置是否使用基于rhosts的安全验证。RhostsRSAAuthentication no“RhostsRSAAuthentication”设置是否使用用RSA算法的基于rhosts的安全验证。RSAAuthentication yes“RSAAuthentication”设置是否使用RSA算法进行安全验证。PasswordAuthentication yes“PasswordAuthentication”设置是否使用口令验证。FallBackToRsh no“FallBackToRsh”设置如果用ssh连接出现错误是否自动使用rsh,由于rsh并不安全,所以此选项应当设置为”no”。UseRsh no“UseRsh”设置是否在这台计算机上使用”rlogin/rsh”,原因同上,设为”no”。BatchMode no“BatchMode”:批处理模式,一般设为”no”;如果设为”yes”,交互式输入口令的提示将被禁止,这个选项对脚本文件和批处理任务十分有用。CheckHostIP yes“CheckHostIP”设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为”yes”。StrictHostKeyChecking no“StrictHostKeyChecking”如果设为”yes”,ssh将不会自动把计算机的密匙加入”$HOME/.ssh/known_hosts”文件,且一旦计算机的密匙发生了变化,就拒绝连接。IdentityFile ~/.ssh/identity“IdentityFile”设置读取用户的RSA安全验证标识。Port 22“Port”设置连接到远程主机的端口,ssh默认端口为22。Cipher blowfish“Cipher”设置加密用的密钥,blowfish可以自己随意设置。EscapeChar ~“EscapeChar”设置escape字符。2、编辑 /etc/ssh/sshd_config 文件: This is ssh server systemwide configuration file.Port 22 ListenAddress 192.168.1.1 HostKey /etc/ssh/ssh_host_key ServerKeyBits 1024 LoginGraceTime 600 KeyRegenerationInterval 3600 PermitRootLogin no IgnoreRhosts yes IgnoreUserKnownHosts yes StrictModes yes X11Forwarding no PrintMotd yes SyslogFacility AUTH LogLevel INFO RhostsAuthentication no RhostsRSAAuthentication no RSAAuthentication yes PasswordAuthentication yes PermitEmptyPasswords no AllowUsers admin 下面逐行说明上面的选项设置:Port 22“Port”设置sshd监听的端口号。ListenAddress 192.168.1.1“ListenAddress”设置sshd服务器绑定的IP地址。HostKey /etc/ssh/ssh_host_key“HostKey”设置包含计算机私人密匙的文件。ServerKeyBits 1024“ServerKeyBits”定义服务器密匙的位数。LoginGraceTime 600“LoginGraceTime”设置如果用户不能成功登录,在切断连接之前服务器需要等待的时间(以秒为单位)。KeyRegenerationInterval 3600“KeyRegenerationInterval”设置在多少秒之后自动重新生成服务器的密匙(如果使用密匙)。重新生成密匙是为了防止用盗用的密匙解密被截获的信息。PermitRootLogin no“PermitRootLogin”设置是否允许root通过ssh登录。这个选项从安全角度来讲应设成”no”。IgnoreRhosts yes“IgnoreRhosts”设置验证的时候是否使用“rhosts”和“shosts”文件。IgnoreUserKnownHosts yes“IgnoreUserKnownHosts”设置ssh daemon是否在进行RhostsRSAAuthentication安全验证的时候忽略用户的”$HOME/.ssh/known_hosts”StrictModes yes“StrictModes”设置ssh在接收登录请求之前是否检查用户家目录和rhosts文件的权限和所有权。这通常是必要的,因为新手经常会把自己的目录和文件设成任何人都有写权限。X11Forwarding no“X11Forwarding”设置是否允许X11转发。PrintMotd yes“PrintMotd”设置sshd是否在用户登录的时候显示“/etc/motd”中的信息。SyslogFacility AUTH“SyslogFacility”设置在记录来自sshd的消息的时候,是否给出“facility code”。LogLevel INFO“LogLevel”设置记录sshd日志消息的层次。INFO是一个好的选择。查看sshd的man帮助页,已获取更多的信息。RhostsAuthentication no“RhostsAuthentication”设置只用rhosts或“/etc/hosts.equiv”进行安全验证是否已经足够了。RhostsRSAAuthentication no“RhostsRSA”设置是否允许用rhosts或“/etc/hosts.equiv”加上RSA进行安全验证。RSAAuthentication yes“RSAAuthentication”设置是否允许只有RSA安全验证。PasswordAuthentication yes“PasswordAuthentication”设置是否允许口令验证。PermitEmptyPasswords no“PermitEmptyPasswords”设置是否允许用口令为空的帐号登录。AllowUsers admin“AllowUsers”的后面可以跟任意的数量的用户名的匹配串,这些字符串用空格隔开。主机名可以是域名或IP地址。 通常情况下我们在连接 OpenSSH服务器的时候假如 UseDNS选项是打开的话,服务器会先根据客户端的 IP地址进行 DNS PTR反向查询出客户端的主机名,然后根据查询出的客户端主机名进行DNS正向A记录查询,并验证是否与原始 IP地址一致,通过此种措施来防止客户端欺骗。平时我们都是动态 IP不会有PTR记录,所以打开此选项也没有太多作用。我们可以通过关闭此功能来提高连接 OpenSSH 服务器的速度。 服务端步骤如下:编辑配置文件 /etc/ssh/sshd_configvim /etc/ssh/sshd_config找到 UseDNS选项,如果没有注释,将其注释 #UseDNS yes添加UseDNS no 找到 GSSAPIAuthentication选项,如果没有注释,将其注释 #GSSAPIAuthentication yes添加GSSAPIAuthentication no 保存配置文件 重启 OpenSSH服务器/etc/init.d/sshd restart Putty server refused our key的三种原因和解决方法1、.ssh文件夹权限错.ssh 以及其父文件夹(root为/root,普通用户为Home目录)都应该设置为只有该用户可写(比如700)。 以下为原因: ssh服务器的key方式登录对权限要求严格。对于客户端: 私钥必须为600权限或者更严格权限(400), 一旦其他用户可读, 私钥就不起作用(如640), 表现为系统认为不存在私钥对于服务器端: 要求必须公钥其他用户不可写, 一旦其他用户可写(如660), 就无法用key登录, 表现为:Permission denied (publickey).同时要求.ssh目录其他用户不可写,一旦其他用户可写(如770), 就无法使用key登录, 表现为:Permission denied (publickey).12chmod 700 ~/.sshchmod 600 ~/.ssh/authorized_keys 2、SElinux导致 密钥文件不能通过SElinux认证,解决方法如下:1 restorecon -R -v /home #root用户为/root我遇到的就是这种情况,找了好久还找到是这个原因,因为是新装的虚拟机,SElinux还没关闭。 这篇博文详细得说明了原因:http://www.toxingwang.com/linux-unix/linux-basic/846.html 3、sshd配置不正确 正确配置方法如下: /etc/ssh/sshd_config 1、找到 #StrictModes yes 改成 StrictModes no (去掉注释后改成 no) 2、找到 #PubkeyAuthentication yes 改成 PubkeyAuthentication yes (去掉注释) 3、找到 #AuthorizedKeysFile .ssh/authorized_keys 改成 AuthorizedKeysFile .ssh/authorized_keys (去掉注释) 4、保存 5、/etc/rc.d/init.d/sshd reload 重新加载 ~/.ssh/config在 ~/.ssh/config 添加配置内容,这样就可以使用 ssh github 来快速连接,同时也可以使用 scp xxx github:~/xxx 来传输数据,比较方便。12Host github HostName github.com VNCVNC概述 VNC (Virtual Network Computing)是虚拟网络计算机的缩写。VNC 是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的。VNC 是在基于 UNIX 和 Linux操作系统的免费的开源软件,远程控制能力强大,高效实用,其性能可以和 Windows 或 MAC 中的任何远程控制软件媲美。在 Linux 中,VNC 包括以下四个命令:vncserver,vncviewer,vncpasswd,和 vncconnect。大多数情况下只需要其中的两个命令:vncserver 和 vncviewer。目前,原来的AT&T版本已经不再使用,因为更多有重大改善的分支版本已经出现, 像是RealVNC, VNC tight 和UltraVNC。 Real VNC 是当前最活跃和强大的主流应用。 RealVNC官方网址 : http://www.realvnc.com/ Tight VNC官方网址: http://www.tightvnc.com/ UltraVNC官方网址 : http://www.uvnc.com/ VNC原理 VNC系统由客户端,服务端和一个协议组成。VNC的服务端目的是分享其所运行机器的屏幕, 服务端被动的允许客户端控制它。 VNC客户端(或Viewer) 观察控制服务端,与服务端交互。 VNC 协议 Protocol (RFB)是一个简单的协议,传送服务端的原始图像到客户端(一个X,Y 位置上的正方形的点阵数据), 客户端传送事件消息到服务端。 服务器发送小方块的帧缓存给客户端,在最简单的情况,VNC协议使用大量的带宽,因此各种各样的方法被发明出来减少通讯的开支,举例来说,有各种各样的编码方法来决定最有效率的方法来传送这些点阵方块) 协议允许客户端和服务端去协议哪种编码会被使用,最简单的编码,被大多数客户端和服务端所支持的是, 从左到右的像素扫描数据的原始编码, 当原始的满屏被发送后,只发送变化的方块区域。这种编码在幁间只有小部分屏幕变化的情况下工作的非常好(像是鼠标键在桌面移动的情况,或在光标处敲击文字),不过如果大量的像素同时变化带宽将会增加的非常高,像是拖动一个窗口或观看全屏录像。 VNC默认使用TCP端口5900至5906,而JAVA的VNC客户端使用5800至5806。一个服务端可以在5500口用“监听模式”连接一个客户端,使用监听模式的一个好处是服务端不需要设置防火墙。 UNIX上的VNC称为xvnc,同时扮演两种角色,对X窗口系统的应用程序来说它是X server,对于VNC客户端来说它是VNC服务器程序。 实验环境 VNC服务端: 操作系统:Red Hat Enterprise Linux Server release 5.7 (Tikanga) VNC客户端: 操作系统:Windows 7专业版 64位操作系统 VNC安装配置 1、安装VNC包 [root@localhost /]# cd /depot/os/mnt/cdrom/Server [root@localhost /]# rpm -ivh vnc-server-4.1.2-14.el5_6.6.x86_64.rpm [root@localhost /]# rpm -ivh vnc-4.1.2-14.el5_6.6.x86_64.rpm 验证vnc-server包是否安装成功: [root@localhost /]# rpm -qa vnc-server vnc-server-4.1.2-14.el5_6.6 2、配置vncservers文件 修改/etc/sysconfig/vncservers文件,未经修改的vncservers文件如下所示: [root@localhost ~]# more /etc/sysconfig/vncservers The VNCSERVERS variable is a list of display:user pairs.# Uncomment the lines below to start a VNC server on display :2as my ‘myusername’ (adjust this to your own). You will alsoneed to set a VNC password; run ‘man vncpasswd’ to see howto do that.# DO NOT RUN THIS SERVICE if your local area network isuntrusted! For a secure way of using VNC, seeURL:http://www.uk.research.att.com/archive/vnc/sshvnc.html.Use “-nolisten tcp” to prevent X connections to your VNC server via TCP.Use “-nohttpd” to prevent web-based VNC clients connecting.Use “-localhost” to prevent remote VNC clients connecting except whendoing so through a secure tunnel. See the “-via” option in the`man vncviewer’ manual page.VNCSERVERS=”2:myusername”VNCSERVERARGS[2]=”-geometry 800x600 -nolisten tcp -nohttpd -localhost”clip_image002 将最后两行配置信息取消注释,添加系统账号 VNCSERVERS=”1:root 2:etl” VNCSERVERARGS[1]=”-geometry 1024x768 -nolisten tcp -nohttpd “ VNCSERVERARGS[2]=”-geometry 1024x768 -nolisten tcp -nohttpd “ VNCSERVERS 是用来设定可以使用VNC的服务器账号,可以设定多个,例如上面root、etl,但是中间要用空格隔开。使用VNCVIEWER登录时,192.168.48.128:1表示是以root账号登录,以此类推。 关于参数配置说明: 1:-geometry 表示桌面分辨率,默认为1024x768,所以上面的1024x768也可以不写。 2:-nohttpd 表示不监听HTTP端口(58xx)。 3:-nolisten tcp 表示不监听TCP端口(60xx) 4:-localhost 只运行从本机访问。 5:AlwaysShared 默认只允许一个VNCVIEWER连接,此参数表示同一个显示端口允许多用户同时登录. 6:-depth 表示色深,参数有8,16,24,32. 7: SecurityTypes None 登录不需要密码认证VncAuth默认值,要密码认证。 3、设置VNC用户密码 如果此时不设置VNC用户密码,启动vncserver服务,则会报如下错误: [root@localhost ~]# service vncserver start Starting VNC server: 1:root [FAILED] [root@localhost /]# vncpasswd Password: Verify: [root@localhost /]# su - etl [etl@localhost ~]$ vncpasswd Password: Verify: [etl@localhost ~]$ 4、启动vncserver服务 [root@localhost ~]# service vncserver start Starting VNC server: 1:root New ‘localhost.localdomain:1 (root)’ desktop is localhost.localdomain:1 Creating default startup script /root/.vnc/xstartup Starting applications specified in /root/.vnc/xstartup Log file is /root/.vnc/localhost.localdomain:1.log 2:etl New ‘localhost.localdomain:2 (etl)’ desktop is localhost.localdomain:2 Creating default startup script /home/etl/.vnc/xstartup Starting applications specified in /home/etl/.vnc/xstartup Log file is /home/etl/.vnc/localhost.localdomain:2.log [ OK ] VNC会在用户根目录($HOME)下的”.vnc”文件夹下生成一系列文件。其中passwd为vnc用户密码文件,由vncpasswd生成。其他的都由vnc初次启动时生成,xstartup为VNC客户端连接时启动的脚本 5、配置xstartup文件 如下所示,将下面紫红色的部分注释取消。 clip_image004 #!/bin/sh Uncomment the following two lines for normal desktop:unset SESSION_MANAGER exec /etc/X11/xinit/xinitrc [ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources xsetroot -solid grey vncconfig -iconic & xterm -geometry 80x24+10+10 -ls -title “$VNCDESKTOP Desktop” & twm & 切换到etl账号,依法炮制 [root@localhost ~]# su - etl [etl@localhost ~]$ vi /home/etl/.vnc/xstartup clip_image006 [root@localhost ~]# service vncserver restart Shutting down VNC server: 1:root 2:etl [ OK ] Starting VNC server: 1:root New ‘localhost.localdomain:1 (root)’ desktop is localhost.localdomain:1 Starting applications specified in /root/.vnc/xstartup Log file is /root/.vnc/localhost.localdomain:1.log 2:etl New ‘localhost.localdomain:2 (etl)’ desktop is localhost.localdomain:2 Starting applications specified in /home/etl/.vnc/xstartup Log file is /home/etl/.vnc/localhost.localdomain:2.log [ OK ] 6、配置防火墙 如果你不配置防火墙,此时用VNC Viewer连接的话,一般会报:”connect:Connection timed out(10060)”错误,如下所示: clip_image008 clip_image010 一般这种情况要么关闭防火墙,要么需要配置防火墙。 [root@localhost ~]# service iptables stop Flushing firewall rules: [ OK ] Setting chains to policy ACCEPT: filter [ OK ] Unloading iptables modules: [ OK ] 关闭防火墙后,用VNCView连接服务器没有问题,但是一般不建议关闭防火墙, [root@localhost ~]# service iptables restart Flushing firewall rules: [ OK ] Setting chains to policy ACCEPT: filter [ OK ] Unloading iptables modules: [ OK ] Applying iptables firewall rules: [ OK ] Loading additional iptables modules: ip_conntrack_netbios_ns [ OK ] [root@localhost ~]# iptables -I INPUT -p tcp –dport 5901 -j ACCEPT [root@localhost ~]# iptables -I INPUT -p tcp –dport 5902 -j ACCEPT clip_image012 OK,可以通过VNC连接到服务器了 关于VNC服务使用的端口号与桌面号相关,VNC使用TCP端口从5900开始,对应关系如下桌面号为“1” —- 端口号为5901桌面号为“2” —- 端口号为5902桌面号为“3” —- 端口号为5903……基于Java的VNC客户程序Web服务TCP端口从5800开始,也是与桌面号相关,对应关系如下桌面号为“1” —- 端口号为5801桌面号为“2” —- 端口号为5802桌面号为“3” —- 端口号为5803基于上面的介绍,如果Linux开启了防火墙功能,就需要手工开启相应的端口,以开启桌面号为“1”相应的端口为例,命令如下 开机自启动vncserver服务 chkconfig vncserver on[参考资料]: http://zh.wikipedia.org/wiki/VNC http://www.ha97.com/4634.html http://blog.sina.com.cn/s/blog_48f9c0840100x2qh.html MetaTipubuntu 删除出现 /var/lib/dpkg/lock 时的解决方法12$ sudo rm /var/cache/apt/archives/lock$ sudo rm /var/lib/dpkg/lock 快速复制到剪贴板 1$ clip < file.txt 前言安装字体 下载 Consolas 字体,然后sudo mkdir -p /usr/share/fonts/yaheisudo cp YaHei.Consolas.1.12.ttf /usr/share/fonts/yahei/然后,改变权限:sudo chmod 644 /usr/share/fonts/yahei/YaHei.Consolas.1.12.ttf安装:cd /usr/share/fonts/yahei/sudo mkfontscalesudo mkfontdirsudo fc-cache -fv boot 空间不够:dpkg –get-selections|grep linux 查看有哪些多余的 kernalsudo apt-get remove linux-image-(版本号)(就是上面带image的版本)有卸载不完全的(有提示),可以用 sudo apt-get autoremove来删除。sudo dpkg -P linux-image-xxx 清除出现 deinstall 的 list tmuxhttps://wiki.archlinux.org/index.php/tmux 高版本的 tmux 。可以支持 vim 的 termguicolor 这一点比较好。 复制的时候,如果直接用鼠标复制的时候,是又vim处理的,需要按住shift才是xterm处理的,后测试了下,果然可以,后来用vnc连server发现在vim中也是同样适用的,高兴 tmux使用C/S模型构建,主要包括以下单元模块: server服务器。输入tmux命令时就开启了一个服务器。 session会话。一个服务器可以包含多个会话 window窗口。一个会话可以包含多个窗口。 pane面板。一个窗口可以包含多个面板。 tmux里的session,window,pane—- session指的是按下tmux命令后 存在的连接便是session创建sessiontmux 创建并指定session名字tmux new -s $session_name 删除sessionCtrl+b :kill-session 临时退出sessionCtrl+b d 列出sessiontmux ls 进入已存在的sessiontmux a -t $session_name 删除所有sessionCtrl+b :kill-server 删除指定sessiontmux kill-session -t $session_name —- window在session里,可以有N个window,并且window可以在不同的session里移动创建windowCtrl+b +c 删除windowCtrl+b & 下一个windowCtrl+b n 上一个windowCtrl+b p 重命名windowCtrl+b , 在多个window里搜索关键字Ctrl+b f 在相邻的两个window里切换Ctrl+b l —- pane在window里,可以有N个pane,并且pane可以在不同的window里移动、合并、拆分创建pane横切split pane horizontalCtrl+b ” (问号的上面,shift+’) 竖切split pane verticalCtrl+b % (shift+5) 按顺序在pane之间移动Ctrl+b o 上下左右选择paneCtrl+b 方向键上下左右 调整pane的大小Ctrl+b :resize-pane -U #向上Ctrl+b :resize-pane -D #向下Ctrl+b :resize-pane -L #向左Ctrl+b :resize-pane -R #向右在上下左右的调整里,最后的参数可以加数字 用以控制移动的大小,例如:Ctrl+b :resize-pane -D 50 在同一个window里左右移动paneCtrl+b { (往左边,往上面)Ctrl+b } (往右边,往下面) 删除paneCtrl+b x 更换pane排版Ctrl+b “空格” 移动pane至windowCtrl+b ! 移动pane合并至某个windowCtrl+b :join-pane -t $window_name 显示pane编号Ctrl+b q 按顺序移动pane位置Ctrl+b Ctrl+o —-其他: 复制模式Ctrl+b [空格标记复制开始,回车结束复制。 粘贴最后一个缓冲区内容Ctrl+b ] 选择性粘贴缓冲区Ctrl+b = 列出缓冲区目标Ctrl+b :list-buffer 查看缓冲区内容Ctrl+b :show-buffer vi模式Ctrl+b :set mode-keys vi 显示时间Ctrl+b t 快捷键帮助Ctrl+b ? (Ctrl+b :list-keys) tmux内置命令帮助Ctrl+b :list-commands tmux如何查看历史输出在tmux里面,因为每个窗口(tmux window)的历史内容已经被tmux接管了,所以原来console/terminal提供的Shift+PgUp/PgDn所显示的内容并不是当前窗口的历史内容,那么应该怎么办呢? 改用C-b [进入copy mode,然后就可以用PgUp/PgDn/光标来浏览历史输出了,按q退出。C-b PgUp也可以直接进入coy mode. 参见:How do I scroll in tmux? - Super User copy mode其实比较类似于vi/emacs里面一个只读buffer,可以移动光标,可以搜索,用C-SPC开始选择,选择完后用M-w拷贝(拷贝后自动退 出copy mode),然后可以C-b ]粘贴(可在其它窗口粘贴), C-b =可以从剪贴板历史中选择。 gnu screen里面呢gnu screen进入copy mode的方式跟tmux类似(C-a [),但进入后它是vi style keybindings。 对于拷贝文字,第一次空格设置开始标记,然后用hjklw之类移动光标,第二次空格完成拷贝。粘贴也是用C-a ] update-alternatives命令详解说明:如我系统已安装有java 1.6,还想要安装java 1.7,但我不想卸载java 1.6。就可以通过update-alternatives –config在多个java版本间进程切换。update-alternatives是用于在多个同类型命令中进行切换的一个脚本,在debian中可以通过apt-get install dpkg来进行安装。 在说明update-alternatives的详细用法之前,先让我们看看系统中已有的例子。打开终端,执行下面的命令: ls -l /usr/bin/javalrwxrwxrwx 1 root root 22 2011-03-12 15:20 /usr/bin/java -> /etc/alternatives/java ls -l /etc/alternatives/javalrwxrwxrwx 1 root root 40 2011-03-12 15:20 /etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk/jre/bin/javajava这个可执行命令实际是一个链接,指向了/etc/alternatives/java。而这个也是一个链接,指向了/usr/lib/jvm/java-6-openjdk/jre/bin/java,这才是最终的可执行文件。之所以建立这样两个链接,是为了方便脚本程序的编写和系统的管理。 语法:暂空!!! 实例: display参数列出一个命令的所有可选命令 update-alternatives –display java config参数用于给某个命令选择一个link值,相当于在可用值之中进行切换吧。 update-alternatives –config java //有 3 个候选项可用于替换 java (提供 /usr/bin/java) 选择 路径 优先级 状态 0 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 自动模式 1 /home/wuekzhu/download/jdk1.6.0_23/bin/java 1 手动模式2 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 手动模式 install参数用于添加一个命令的link值,相当于添加一个可用值,其中slave非常有用。 update-alternatives –install /usr/bin/java java /usr/local/jre1.6.0_20/bin/javac 100update-alternatives –install /usr/bin/java java /usr/local/jre1.6.0_20/bin/javac 100 –slave /usr/bin/javac javac /usr/local/jre1.6.0_20/bin/javac remove参数用于删除一个命令的link值,其附带的slave也将一起删除。 update-alternatives –remove java /usr/local/jre1.6.0_20/bin/java当然如果想让java能使用,还是得把java按照如下添加到环境变量去。 vim /etc/profile //在最后添加以下内容JAVA_HOME=/usr/local/jdk1.5.0_22CLASSPATH=.:$JAVA_HOME/lib/tools.jarPATH=$PATH: $JAVA_HOME/binexport PATH=$PATH:$JAVA_HOME/binexport JAVA_HOME CLASSPATH PATH如果想通过update-alternatives在多个版本的java间切换,只需简单地用update-alternatives –config java,选择我们想要的java版本即可! perl模块安装转自:http://www.mike.org.cn/blog/index.php?load=read&id=643 Perl 到了第五版增加了模块的概念,用来提供面向对象编程的能力。这是 Perl 语言发展史上的一个里程碑。此后,广大自由软件爱好者开发了大量功能强大、构思精巧的 Perl 模块,极大地扩展了 Perl 语言的功能。CPAN(Comprehensive Perl Archive Network)是Perl模块最大的集散地,包含了现今公布的几乎所有的perl模块。 安装方法 我在这里介绍一下各种平台下 perl 模块的安装方法。以安装Net-Server模块为例。 一 Linux/Unix下安装Perl模块有两种方法:手工安装和自动安装。 第一种方法是从CPAN上下载您需要的模块,手工编译、安装。第二种方法是使用CPAN模块自动完成下载、编译、安装的全过程。 A、手工安装的步骤: 从 CPAN(http://search.cpan.org/)下载了Net-Server模块0.97版的压缩文件Net-Server-0.97.tar.gz,假设放在/usr/local/src/下。 cd /usr/local/src 解压缩这个文件,这时会新建一个Net-Server-0.97的目录。 tar xvzf Net-Server-0.97.tar.gz 换到解压后的目录: cd Net-Server-0.97 生成 makefile: perl Makefile.PL 生成模块:make 测试模块(这步可有可无): make test 如果测试结果报告“all test ok”,您就可以放心地安装编译好的模块了。 安装模块前,先要确保您对 perl5 安装目录有可写权限(通常以 su 命令获得),执行: make install 现在,试试 DBI 模块吧。如果下面的命令没有给出任何输出,那就没问题。 $>perl -MNet::Server -e1 上述步骤适合于 Linux/Unix下绝大多数的Perl模块。可能还有少数模块的安装方法略有差别,所以最好先看看安装目录里的 README 或 INSTALL。 有的时候如果是build.pl的需要以下安装步骤:(需要Module::Build模块支持) perl Build.PL ./Build ./Build test ./Build install B、使用CPAN模块自动安装方法一: 安装前需要先联上网,并且您需要取得root权限。 perl -MCPAN -e shell 初次运行CPAN时需要做一些设置,如果您的机器是直接与因特网相联(拨号上网、专线,etc.),那么一路回车就行了,只需要在最后一步选一个离您最近的 CPAN 镜像站点。例如我选的是位于国内的http://www.cnblogs.com/itech/admin/ftp://www.perl87.cn/CPAN/ 。否则,如果您的机器位于防火墙之后,还需要设置ftp代理或http代理。下面是常用 cpan 命令。 获得帮助 cpan>help 列出CPAN上所有模块的列表 cpan>m 安装模块,自动完成Net::Server模块从下载到安装的全过程。 cpan>install Net::Server 退出 cpan>quit C、使用CPAN模块自动安装方法二: cpan -i 模块名 例如:cpan -i Net::Server 二 windows上perl模块安装 A 手动(跟Linux类似) [解压后 perl makefile.pl nmake/dmake nmake/dmake install] nmake需要cd C:\Program Files\Microsoft Visual Studio X\VC\bin and execute vcvars32.bat;然后执行nmake; dmake 貌似是cpan环境配置好就有了在C:\Perl\site\bin下。B Cpan (安装前需要对cpan配置,cpan需要安装其他的模块dmake和MinGw gcc compiler) (跟Linux类似) C 如果使用ActivePerl,可以使用PPM来安装,使用PPM GUI或PPM Commandline,PPM commandline实例如下: a) add correct repositories.. c:\perl\bin\ppm repo add http://theoryx5.uwinnipeg.ca/ppms/package.lst c:\perl\bin\ppm repo add http://www.roth.net/perl/packages/ b) add the packages c:\perl\bin\ppm install Carp-Assert c:\perl\bin\ppm install Log-Log4perl c:\perl\bin\ppm install YAML-Syck 三 几个主要的CPAN站点有: 国内: 最新更新请查阅 http://cpan.org/SITES.html http://www.perl87.cn/CPAN/ 网页镜像 http://www.cnblogs.com/itech/admin/ftp://www.perl87.cn/CPAN/ 模块镜像 国外:http://www.cpan.org/ 四 使用cpan和ppm安装时要注意模块名字的大小写 完! @INC 错误时cpan > install Config::IniFiles autojump如果你找不到适合你的版本的包,你可以从GitHub上下载源码包来编译。(不要使用 apt yum 等 安装。建议只使用源代码编译安装)autojump的基本用法 autojump的工作方式很简单:它会在你每次启动命令时记录你当前位置,并把它添加进它自身的数据库中。这样,某些目录比其它一些目录添加的次数多,这些目录一般就代表你最重要的目录,而它们的“权重”也会增大。 现在不管你在哪个目录,你都可以使用下面的语法来直接跳转到这些目录:Shellautojump [目录的名字或名字的一部分]1 autojump [目录的名字或名字的一部分] 注意,你不需要输入完整的名称,因为autojump会检索它的数据库,并返回最可能的结果。 例如,假定我们正在下面的目录结构中工作。 rger140043jbr5bwr2n1znj87c 那么下面的命令将直接让你跳到/root/home/doc下,不管你当前位置在哪里。Shell$ autojump do1 $ autojump do 如果你也很讨厌打字,那么我推荐你为autojump起个别名,或者使用默认的别名。Shell$ j [目录的名字或名字的一部分]1 $ j [目录的名字或名字的一部分] 另外一个引人注目的功能是,autojump支持zsh和自动补完。如果你不确认哪里是不是你要跳转的地方,敲击TAB键就会列出完整路径。 还是同样的例子,输入:Shell$ autojump d1 $ autojump d 然后敲击tab键,将会返回/root/home/doc或者/root/home/ddl。 最后,对于高级用户,你可以访问目录数据库,并修改它的内容。可以使用下面的命令来手动添加一个目录:Shell$ autojump -a [目录]1 $ autojump -a [目录] 如果你突然想要把当前目录变成你的最爱和使用最频繁的文件夹,你可以在该目录通过命令的参数 i 来手工增加它的权重Shell$ autojump -i [权重]1 $ autojump -i [权重] 这将使得该目录更可能被选择跳转。相反的例子是在该目录使用参数 d 来减少权重:Shell$ autojump -d [权重]1 $ autojump -d [权重] 要跟踪所有这些改变,输入:Shell$ autojump -s1 $ autojump -s 这会显示数据库中的统计数据。而以下:Shell$ autojump –purge1 $ autojump –purge 命令将会把不再存在的目录从数据库中移除。 简言之,autojump将会受到所有命令行高级用户的欢迎。不管你是在ssh进一台服务器,还是仅仅想要追随复古潮流,敲更少的键来减少导航时间总是件好事。如果你真的热衷于此类工具,你也肯定也想看看Fasd,它应该会给你一个惊喜——我们下次再介绍它。 你觉得autojump怎么样?你会经常用它么?发表一下你的评论吧 puttyputty 登陆linux,命令行下无法用”home”、“end” 键putty -> Connection -> Data -> Terminal type string 改成 Linux 在putty中打开vi时复制文字到windows复制的时候,如果直接用鼠标复制的时候,是又vim处理的,需要按住shift才是xterm处理的,后测试了下,果然可以,后来用vnc连server发现在vim中也是同样适用的,高兴 sed[root@www ~]# sed [-nefr] [动作]选项与参数:-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。-e :直接在命令列模式上进行 sed 的动作编辑;-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)-i :直接修改读取的文件内容,而不是输出到终端。 动作说明: [n1[,n2]]functionn1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』 function:a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦! 复制代码 以行为单位的新增/删除 将 /etc/passwd 的内容列出并且列印行号,同时,请将第 2~5 行删除! [root@www ~]# nl /etc/passwd | sed ‘2,5d’1 root:x:0:0:root:/root:/bin/bash6 sync:x:5:0:sync:/sbin:/bin/sync7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown…..(后面省略)….. sed 的动作为 ‘2,5d’ ,那个 d 就是删除!因为 2-5 行给他删除了,所以显示的数据就没有 2-5 行罗~ 另外,注意一下,原本应该是要下达 sed -e 才对,没有 -e 也行啦!同时也要注意的是, sed 后面接的动作,请务必以 ‘’ 两个单引号括住喔! 只要删除第 2 行 nl /etc/passwd | sed ‘2d’ ripgrephttps://github.com/BurntSushi/ripgrep 这个就是 rg 查找 命令了。 查找 liblocate libgcc或者dpkg -l | grep -i lua 当安装了相应的 lib 文件之后(如 liblua5.2-dev) 之后,无法 locate lib到相应的库,则可以使用 ldconfig( 或者 updatedb 吧) 对动态连接库的 list 进行更新。 configure lib not foundPKG_CONFIG_PATHPKG_CONFIG_LIBDIR上面这两个环境变量,一般是使用在 configure 的,用于 package 的查找。当提示某些pkg 或者 pkg 的 lib 找不着时,可以适当修改一下 apt install libxxx-devldconfigPKG_CONFIG_LIBDIR=$PKG_CONFIG_LIBDIR:/usr/lib/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig 安装 build-dep当使用sudo apt-get build-dep 【软件安装包】安装软件时出现如下错误 E: You must put some ‘source’ URIs in your sources.list 在搜索中找到 ‘Software & Updates’, 然后在 “Ubuntu Software” 菜单中将 “Source code”框勾选上。如下图位置:这是用来添加一些 ‘deb-src’ 在 ‘/etc/apt/sources.list’文件中,然后你就可以运行之前的命令安装软件了: sudo apt-get build-dep 【软件安装包】 add-apt-repository添加 ppa 时,可以使用命令行sudo add-apt-repository ‘URL’删除 ppa,通过修改源文件。 sudo gedit /etc/apt/sources.list cd /etc/apt/sources.list.d && sudo gedit ‘xxxxx’或者sudo add-apt-repository –remove ppa:whatever/ppa 添加或者删除了 ppa 之后,还需要 sudo apt-get update 用户管理1、建用户: adduser phpq //新建phpq用户passwd phpq //给phpq用户设置密码 2、建工作组groupadd test //新建test工作组 3、新建用户同时增加工作组useradd -g test phpq //新建phpq用户并增加到test工作组 注::-g 所属组 -d 家目录 -s 所用的SHELL 4、给已有的用户增加工作组 usermod -G groupname usernameusermod -aG groupname username 或者:gpasswd -a user group 5、临时关闭:在/etc/shadow文件中属于该用户的行的第二个字段(密码)前面加上就可以了。想恢复该用户,去掉即可。 或者使用如下命令关闭用户账号: passwd peter –l 重新释放: passwd peter –u 6、永久性删除用户账号 userdel peter groupdel peter usermod –G peter peter (强制删除该用户的主目录和主目录下的所有文件和子目录) 7、从组中删除用户 编辑/etc/group 找到GROUP1那一行,删除 A 或者用命令 gpasswd -d A GROUP 8、显示用户信息 id usercat /etc/passwd 补充:查看用户和用户组的方法 用户列表文件:/etc/passwd用户组列表文件:/etc/group 查看系统中有哪些用户:cut -d : -f 1 /etc/passwd查看可以登录系统的用户:cat /etc/passwd | grep -v /sbin/nologin | cut -d : -f 1查看用户操作:w命令(需要root权限)查看某一用户:w 用户名查看登录用户:who查看用户登录历史记录:last rsync命令 rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。 rsync是一个功能非常强大的工具,其命令也有很多功能特色选项,我们下面就对它的选项一一进行分析说明。语法123456rsync [OPTION]... SRC DESTrsync [OPTION]... SRC [USER@]host:DESTrsync [OPTION]... [USER@]HOST:SRC DESTrsync [OPTION]... [USER@]HOST::SRC DESTrsync [OPTION]... SRC [USER@]HOST::DESTrsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST] 查找大于 100M 的文件fdu -sh [dirname|filename]当前目录的大小: du -sh . 当前目录下个文件或目录的大小: du -sh 显示前10个占用空间最大的文件或目录: du -s | sort -nr | headind -type f -size +100M ubuntuubuntu 升级系统12sudo apt upgradesudo apt dist-upgrade 设置自动挂载,重启虚拟机系统共享仍在。可以在/etc/fstab中添加一项BaiduShare /mnt/share vboxsf rw,gid=110,uid=1100,auto 0 0 VirtualBox一、VirtualBox的提供了四种网络接入模式,它们分别是:1、NAT 网络地址转换模式(NAT,Network Address Translation)2、Bridged Adapter 桥接模式3、Internal 内部网络模式4、Host-only Adapter 主机模式 Dir NAT Bridged Internal Host-only Guest to Host yes yes no config Host to Guest no yes no config Guest to Guest no yes null yes 压缩 guest os 占用的大小如果guest os 是windows:1、先在guest os上运行磁盘碎片管理器,将各个磁盘的磁盘碎片减少;2、下载sdelete(http://technet.microsoft.com/en-us/sysinternals/bb897443.aspx);3、运行sdelete -c -z ;4、关闭guest os 和 VirtualBox5、在host os上运行VBoxManage modifyhd –compact yourImage.vdi 如果 guest os 为 linux 时 进入su $ dd if=/dev/zero of=test.file (会填满整个虚拟磁盘,对 host 的磁盘影响不大) $ rm test.file 关闭掉 guest os 以及 VBox 在host os上 运行下列命令1VBoxManage modifyhd --compact yourImage.vdi 这样在guest上看到占用的空间就和host上看到的空间就一样了。 home在 linux 下面,有一堆杂七杂八的东西。 .cache .config .dbus .ibus .Xauthorxxx 如果你的电脑出现一些奇怪的现象:输入无法输入,桌面无法显示,图标异常,字体看不见等等问题。可以尝试将这些杂七杂八的东西删掉。 超级终端颜色特效控制:printf(“\033[1;33m Hello World. \033[0m \n”);颜色如下:none = “\033[0m”black = “\033[0;30m”dark_gray = “\033[1;30m”blue = “\033[0;34m”light_blue = “\033[1;34m”green = “\033[0;32m”light_green -= “\033[1;32m”cyan = “\033[0;36m”light_cyan = “\033[1;36m”red = “\033[0;31m”light_red = “\033[1;31m”purple = “\033[0;35m”light_purple = “\033[1;35m”brown = “\033[0;33m”yellow = “\033[1;33m”light_gray = “\033[0;37m”white = “\033[1;37m” 字背景颜色范围: 40–49 字颜色: 30–39 40: 黑 30: 黑 41:红 31: 红 42:绿 32: 绿 43:黄 33: 黄 44:蓝 34: 蓝 45:紫 35: 紫 46:深绿 36: 深绿 47:白色 37: 白色 输出特效格式控制: \033[0m 关闭所有属性\033[1m 设置高亮度\03[4m 下划线\033[5m 闪烁\033[7m 反显\033[8m 消隐\033[30m – \033[37m 设置前景色\033[40m – \033[47m 设置背景色 光标位置等的格式控制: \033[nA 光标上移n行\03[nB 光标下移n行\033[nC 光标右移n行\033[nD 光标左移n行\033[y;xH设置光标位置\033[2J 清屏\033[K 清除从光标到行尾的内容\033[s 保存光标位置\033[u 恢复光标位置\033[?25l 隐藏光标\33[?25h 显示光标 lsusb lspci可以查看对应的接口信息。 lspci | grep network 就可以查看网卡的信息了。 linux创建指定大小的文件一、生成文件大小和实际占空间大小一样的文件 dd if=/dev/zero of=50M.file bs=1M count=50 dd if=/dev/zero of=20G.file bs=1G count=20 bs=1M表示每一次读写1M数据,count=50表示读写 50次,这样就指定了生成文件的大小为50M。bs参数还可以进一步细分为ibs和obs两种,为读操作与写操作分别指定不同的Buffer大小。 二、生成文件大小固定,但实际不占空间命令 dd if=/dev/zero of=1G.img bs=1M seek=1000 count=0 这里用了一个新的命令seek,表示略过1000个Block不写(这里Block按照bs的定义是1M),count=0表示写入0个Block。用ls(查看文件大小)命令看新生成的文件,大小可以看出是1000M。但是再用du(查看文件占用空间)一看,实际占用硬盘大小只有0M。 修改用户名 以root身份登录(反正就不要登录待改名的用户),然后使用下列命令进行修改 格式: usermod -l NewUser -d /home/NewUser -m OldUser usermod -l alao -d /home/alao -m tom -l 修改用户名 -d 修改登录后使用的路径 -m 修改登录名称的同时将目录名称一同修改2 修改组名称: 继上面操作后,继续执行下列命令 格式: groupmod -n NewUser OldName groupmod -n alao tom -n 修改组的名称 出现 zombie (僵尸)进程时1:top命令 查看进程:2:查看具体是哪个进程:12linux:~ # ps -A -o stat,ppid,pid,cmd |grep -e "^[Zz]"Z 3064 5118 [socket-memory-e] <defunct> 可以看出僵尸进程的进程id为3064 3:查看僵尸进程是什么应用:linux:~ #lsof -p 3064 4:kill僵尸进程:kill -9 3064 注:从第3步可以看出僵尸进程是什么应用,请依据实际情况确认此进程是否能够kill掉,及明确kill之后需要重启的应用等后续处理;]]></content>
<categories>
<category>System</category>
<category>linux</category>
</categories>
<tags>
<tag>linux</tag>
<tag>centos</tag>
<tag>ubuntu</tag>
<tag>shell</tag>
</tags>
</entry>
<entry>
<title><![CDATA[xilinx-vivado]]></title>
<url>%2Fblogs%2Fxilinx-vivado%2F</url>
<content type="text"><![CDATA[前言 我所知道的不多。——某名人言 Start vivadoInstall解压压缩包然后直接执行 xsetup source Xilinx/vivado/201x.x/setting.sh Uninstall直接 rm -rf synthesis使用 vivado 综合代码时,(只是 run systhesis,还没有开始 run implementation)在 Utilization 的报告中:LUT LUTRAM FF IO DSP 这些初步报告都基本准确,但 BRAM就十分不准确。BRAM 的报告需要在 run implementation 后才准确些。 MetaTip vivado 在下板调试时,使用下面的命令,可以将波开数据导出来。write_hw_ila_data -force -csv_file -verbose dump.csvwrite_hw_ila_data -force -vcd_file -verbose dump.vcd add_files 可以用来添加 filelist。但不是很灵活。 完成Implementation后,在Vivado IDE的Flow Navigator点击Open Implemented Design,然后选择report_utilization。在生成的结果中选中某一类资源,会看到按模块排列的资源占用情况。或者使用命令:report_utilization -hierarchical]]></content>
<categories>
<category>ASIC</category>
<category>FPGA</category>
</categories>
<tags>
<tag>xilinx</tag>
<tag>vivado</tag>
</tags>
</entry>
<entry>
<title><![CDATA[windows-note]]></title>
<url>%2Fblogs%2Fwindows-note%2F</url>
<content type="text"><![CDATA[Tip windows 下创建 link 的正确方法。mklink Word使用 F9 可以快速更新“交叉引用”。可以选择一批的“引用”,并按“F9”来进行更新。比较快速。 word 使用正则表达式查找替换 本节中的步骤介绍了如何使用正则表达式转置姓名。请记住,始终使用“查找和替换”对话框来运行您的正则表达式。同时请记住,如果表达式没有按预期工作,你始终可以按下 CTRL + Z 来撤销您的更改,然后尝试其他表达式。转置姓名启动 Word,然后打开一个新的空白文档。 复制此表格,将它粘贴到该文档中。Josh BarnhillDoris HartwigTamara JohnstonDaniel Shimshoni 在“开始”选项卡上的“编辑”组中,单击“替换”以打开“查找和替换”对话框。 如果您没有看到“使用通配符”复选框,请单击“更多”,然后选中该复选框。如果您没有选中该复选框,Word 会将通配符视作文本。在“查找内容”框中键入以下字符。请确保您在两组括号之间包含了空格: (<>) (<>)在“替换为”框中,键入以下字符。请确保您在逗号和第二个斜杠之间包含了空格: \2, \1选择该表格,然后单击“全部替换”。Word 会转置这些姓名并使用逗号分隔它们,如下所示:Barnhill, JoshHartwig, DorisJohnston, TamaraShimshoni, Daniel 此时,您可能会想知道:如果您的姓名中有一部分或全部包含中间名首写字母,该怎么做? 请参阅使用正则表达式中的第一个示例以了解更多信息。 https://blog.csdn.net/robotcator/article/details/31840825https://www.cnblogs.com/whchensir/p/5768030.html 本文来自 robotcator 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/robotcator/article/details/31840825?utm_source=copy Excel如何用函数实现求A列乘以B列然后相加的总和,如下,类似15+26+37+48,用函数如何实现1 52 63 74 8 =SUMPRODUCT(A1:A15,B1:B15) 或者直接{=sum(A1:A15*B1:B15)},花括号表示是数组公式,按ctrl+shift+enter SecureCRT 相信不少SecureCRT的新手都有过这样的困扰:SecureCRT 超时自动断开连接 很影响工作解决办法:Options->Session Options->Terminal->Anti-idle->勾选Send protocol NO-OP(中文版:选项->会话选项->终端->反空闲->发送协议NO-OP)后面的设置时间默认的是60秒,只要小于自动断开连接的时限就可以了 端口被占用netstat -aon|findstr “443”tasklist|findstr “???” 进程列表,kill相信大家都有用命令行(CMD)解决问题的习惯,起码我感觉自己在处理Windows系统故障时越来越离不开Windows PE了,今天我想介绍两个很实用的命令:Tasklist与Tskill。命令:Tasklist 功能:命令用来显示运行在本地或远程计算机上的所有进程,可以监控用户的操作。 命令格式: Tasklist [/S system [/U username [/P [password]]]] [/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH] 参数含义 /S system 指定连接到的远程系统。 /U [domain]user 指定使用哪个用户执行这个命令。 /P [password] 为指定的用户指定密码。 /M [module] 列出调用指定的DLL模块的所有进程。如果没有指定模块名,显示每个进程加载的所有模块。 /SVC 显示每个进程中的服务。 /V 显示详细信息。 实例分析: 如果我们只是查看本地主机进程信息,直接办入命令即可。下面的实例是从客户机远程查看内网中某台主机时程信息。 假如我们有一台服务器: 内网地址:192.168.0.1, 管理员帐号:administrator 管理员密码:password 我们需要在CMD窗口输入: Tasklist /s 192.168.0.1 /u administrator /p password 这条命令可以使我们方便的查看到远程主机的运行情况,当然前提是保证RPC服务正常启动。 命令:tskill 功能:用来关掉进程的 命令格式: TSKILL processid | processname [/SERVER:servername] [/ID:sessionid | /A] [/V] 参数含义 processid 要结束的进程的 Process ID。 processname 要结束的进程名称。 /SERVER:servername 含有 processID 的服务器(默认值是当前值)。 使用进程名和 /SERVER 时,必须指定 /ID 或 /A /ID:sessionid 结束在指定会话下运行的进程。 /A 结束在所有会话下运行的进程。 /V 显示正在执行的操作的信息。 这个Tskill用法很简单,直接输入Tskill 图象名或PID就可以了。 偶尔碰上Tskill无法结束的进程,还可以试试Ntsd命令, 格式为: ntsd -c q -pn {进程名} 参数含义: -c是表示执行debug命令; q表示执行结束后退出; -p 表示后面紧跟着是你要结束的进程对应的PID; -pn 表示后面紧跟着是你要结束的进程名;]]></content>
<categories>
<category>System</category>
<category>windows</category>
</categories>
<tags>
<tag>win32</tag>
<tag>windows</tag>
</tags>
</entry>
<entry>
<title><![CDATA[vim-note]]></title>
<url>%2Fblogs%2Fvim-note%2F</url>
<content type="text"><![CDATA[前言相关连接http://vim.wikia.com/wiki/Vim_Tips_Wiki]]></content>
<categories>
<category>Tools</category>
<category>vim</category>
</categories>
<tags>
<tag>vim</tag>
<tag>gvim</tag>
<tag>editor</tag>
</tags>
</entry>
<entry>
<title><![CDATA[git-note]]></title>
<url>%2Fblogs%2Fgit-note%2F</url>
<content type="text"><![CDATA[前言build source为什么要 build git 呢?因为在 CentOS 6 中,git 的版本很旧,只有 git 1.7.x版本。些版本的 git 似乎没有 cache 的样子,每次的 git status 都要整个 git 查找从而导致很卡,而 oh-my-zsh,每次都会去查看一下 git 目录下的状态,进而十分影响用户体验 1234567$ git clone https://github.com/git/git$ cd git$ makeor$ make prefix=/usr all doc info ;# as yourselfor$ make prefix=/usr install install-doc install-html install-info ;# as root 上面的语句,可以安装 manual。安装完后,就可以使用 man git 来查看最新的 git 了。 …http-push.c:920: error: ‘xml_cdata’ undeclared (first use in this function)http-push.c:921: warning: implicit declaration of function ‘XML_Parse’http-push.c:926: warning: implicit declaration of function ‘XML_ErrorString’http-push.c:927: warning: implicit declaration of function ‘XML_GetErrorCode’http-push.c:930: warning: implicit declaration of function ‘XML_ParserFree’http-push.c: In function ‘remote_ls’:http-push.c:1154: error: ‘XML_Parser’ undeclared (first use in this function)http-push.c:1154: error: expected ‘;’ before ‘parser’http-push.c:1161: error: ‘parser’ undeclared (first use in this function)http-push.c:1164: error: ‘xml_cdata’ undeclared (first use in this function)http-push.c: In function ‘locking_available’:http-push.c:1228: error: ‘XML_Parser’ undeclared (first use in this function)http-push.c:1228: error: expected ‘;’ before ‘parser’http-push.c:1235: error: ‘parser’ undeclared (first use in this function) Oh man, compile errors. Bad. The key seemed to be:expat.h: No such file or directory A bit o Googling: missing library headers.$ sudo yum install expat-devel Restart the build. Works. $ make install Whee!$ git –versiongit version 1.8.3.2.768.g911011a ps. Dont forget theexport PATH=~/bin:$PATH submodule删除 submodule未 commit已 commit 未 push已 push更新Submodule更新Submodule有两种方式:在父项目的目录下直接运行 git submodule foreach git pull 在Submodule的目录下面更新 cd pod-librarygit pull 相关连接https://segmentfault.com/a/1190000003076028#articleHeader2 tag$ git tag -a v1.4 -m “my version 1.4” git tag 下载指定 tag 的源码: git clone --depth 1 -b <yourtags> https:xxx/xxx.git git describe — 显示当前离当前提交最近的tag 如果符合条件的tag指向最新提交则只是显示tag的名字,否则会有相关的后缀来描述该tag之后有多少次提交以及最新的提交commit id。不加任何参数的情况下,git describe 只会列出带有注释的tag 获取最新的 tags1git describe --exact-match --tags HEAD 2>&1 另外一个方案1git describe --tags `git rev-list --tags --max-count=1` 然后使用 git checkout <tags> stageremote方法有很多,这里简单介绍几种: 以下均以项目git_test为例:老地址:http://192.168.1.12:9797/john/git_test.git新地址:http://192.168.100.235:9797/john/git_test.git远程仓库名称: origin方法一 通过命令直接修改远程地址 进入git_test根目录 git remote 查看所有远程仓库, git remote xxx 查看指定远程仓库地址 git remote set-url origin http://192.168.100.235:9797/john/git_test.git 方法二 通过命令先删除再添加远程仓库 进入git_test根目录 git remote 查看所有远程仓库, git remote xxx 查看指定远程仓库地址 git remote rm origin git remote add origin http://192.168.100.235:9797/john/git_test.git 方法三 直接修改配置文件 进入git_test/.git vim config [core] repositoryformatversion = 0 filemode = true logallrefupdates = true precomposeunicode = true [remote "origin"] url = http://192.168.100.235:9797/shimanqiang/assistant.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master 修改 [remote “origin”]下面的url即可 方法四 通过第三方git客户端修改。 以SourceTree为例,点击 仓库 -> 仓库配置 -> 远程仓库 即可管理此项目中配置的所有远程仓库, 而且这个界面最下方还可以点击编辑配置文件,同样可以完成方法三。]]></content>
<categories>
<category>Tools</category>
<category>git</category>
</categories>
<tags>
<tag>git</tag>
<tag>revision</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Markdon 语法]]></title>
<url>%2Fblogs%2Fmarkdown-syntax%2F</url>
<content type="text">< Reference-style 引用方式:12[link text][id][id]: https://www.mozilla.org "title text" Relative reference to a repository file 引用存储文件:1[link text](../path/file/readme.text "title text") 还能这样使用:12[link text][][link text]: http://www.reddit.com 12[link text][link text]: http://www.reddit.com Email 邮件:1<[email protected]> Images 图片:Inline-style 内嵌方式:1 Reference-style 引用方式:12![alt text][logo][logo]: https://github.com/images/icon48.png "title text" Code and Syntax Highlighting 代码和语法高亮:标记一小段行内代码: 本文是一篇介绍Markdown的语法的文章如果高亮的内容包含`号,可以这样写: `包裹起来` 语法高亮: 1\<div>Syntax Highlighting\</div> 1body{font-size:12px} 12var s = "JavaScript syntax highlighting";alert(s); 123<?php echo "hello, world!";?> 12s = "Python syntax highlighting"print s Block Code 代码分组(代码区块):在该行开头缩进4个空格或一个制表符(tab) Blockquotes 引用: Email-style angle bracketsare used for blockquotes. And, they can be nested. Headers in blockquotes You can quote a list. Etc. Hard Line Breaks 换行:123在一行的结尾处加上2个或2个以上的空格,也可以使用</br>标签第一行文字,第二行文字 Horizontal Rules 水平分割线: Escape character 转义符(反斜杠):Markdown 可以利用反斜杠来插入一些在语法中有其它意义的符号,例如:如果你想要用星号加在文字旁边的方式来做出强调效果,你可以在星号的前面加上反斜杠: *literal asterisks* Markdown 支持以下这些符号前面加上反斜杠来帮助插入普通的符号:\反斜杠 `反引号 *星号 _下划线 {}花括号 []方括号 ()括弧 #井字号 +加号 -减号 .英文句 !感叹号 Additional 补充:Markdown也支持传统的HTML标签。比如一个链接,你不太喜欢Markdown的写法,也可以直接写成表格 Tables Are Cool col 3 is right-aligned $1600 col 2 is centered $12 zebra stripes are neat $1]]></content>
<categories>
<category>Misc</category>
</categories>
<tags>
<tag>markdown</tag>
</tags>
</entry>
<entry>
<title><![CDATA[HEXO 零基础搭建个人 Blog]]></title>
<url>%2Fblogs%2Fsetup-blog%2F</url>
<content type="text"><![CDATA[前言本人不是网页前端设计专业,一切技术对于我来说都是新的,所以有必要将之前折腾的东西记录下。 最初的做法一开始折腾 Github Page 的时候是在 2015 年,那时 Hexo 刚兴起不久,只有耳闻,却没有涉及,而是选择了一个更加冷门的方法:同样使用 Markdown 书写博客,再由pandoc转成 html ,页面布局直接模(chao)仿(xi)大神的template。在此感谢这些鬼东西一直在折磨我,留言以纪念。 一直在模仿,从未有超越——某名人言 相关连接 http://pages.tzengyuxio.me/pandoc/ http://pandoc.org/ 关于本博客而今,Hexo 已经十分成熟,在国人的群策群力之下,Hexo 已经开始赶超 Jekyll 。作为中国人,当然得支持国货啦(重点是中文!中文!!中文!!) 以 Hexo 为 Blog framework 以 Next 为主题 部署在 Github Page 上 在 namesilo 购买个人域名,支持支付宝。 使用 Valine 作为评论区,需要注册 LeanCloud 使用微博作为图床 免费搭建个人博客重点当然在于免费啦~NOTE : 大部分域名都是需要购买的,也有一些是可以免费注册的,但可能不遵守 ICANN 。 注册与基本安装 Github 或者 Coding 七牛 或者 微博 如果想弄个人域名,则可能还需要注册 万网,GoDaddy, 或者 namesilo 等域名商,还可注册 DNSpod 创建 Github Page 安装 Nodejs, Hexo,Github Desktop 或者 git 认真阅读一下 Next 的帮助文件,然后使用 npm 安装好插件 利用 --save 可以将插件保存在 package.json 中,如: npm install --save hexo-generator-sitemap 域名加密 https,可能还需要了解 let’s encrypt 安装 gem,travis。gem 是 ruby 下的东西,所以要安装 ruby。Ubuntu 下可以使用下面命令行安装12$ sudo apt-get instal -y ruby ruby-dev$ sudo gem install travis NOTE 1 : 建议尽量安装新版本的NOTE 2 : 官网的教程一般最详细有效的,但合理的借助他人的总结,也有助于快速入门 规划规划是指合理安排文件的位置,这里就简单说明一下我的规划。Github Page 里面规定,username.github.io 这个 repos 必须以 master 这个 branch 作为 Github Page。为了保证 Page 与源码同一个 repo,所以我新建了一个叫 source 的 branch ,然后让 Hexo 自动部署在这个 repo 的 master 上面。当然你也可以 ‘Page’ 与 ‘source’ 放在两个不同的 repo 中,你钟意咯。 Github Page 可以不止一个!!Github Page 有两种: User/Organization Pages and Project Pages ,User Page(username.github.io)只能一个,但 Project Page(普通的 repo)可以多个,Project Page 可以利用 CNAME 来创建个人域名中的 subdomain。 NOTE : namesilo 可以创建 50 个 subdomain 相关连接https://help.github.com/articles/user-organization-and-project-pages/ 搭建Hexo 中非常多好看的主题,本着少折腾的基本原则,选择大众所爱,且有一个大团队在维护的 Next 主题。开始之前,一定要先好好阅读 Hexo 的文档,使用 Next 也要好好先阅读一下使用文档,通读两三遍也算是正常的。然后开工。 Ubuntu 上安装 Node.js直接安装 安装 12sudo apt-get install nodejssudo apt-get install npm 升级 npm 123sudo npm install npm -g/usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/[email protected] /usr/local/lib/node_modules/npm 升级 node.js 123sudo npm install –g nsudo n latest(升级node.js到最新版) or $ n stable(升级node.js到最新稳定版)n后面也可以跟随版本号比如:`n v0.10.26` 或者 `n 0.10.26` 卸载先卸载 npm , 后卸载nodejs 12sudo npm uninstall npm -gsudo apt-get remove nodejs nvm安装1wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash 安装成功后,需要关闭xshell,重新启动。nvm才会生效。使用 command -v nvm 查看 nvm 是否安装成功。 通过 nvm ls 查看已安装的版本,通过 nvm ls-remote 查看可使用版本 1234567$ nvm ls-remote v0.1.14 v0.1.15 v0.1.16 v0.1.17 v0.1.18... 安装nodejs, 通过 nvm install 7.8.0 来安装,后面的版本号我们可以任意选择 npm镜像替换为淘宝镜像1npm get registry https://registry.npmjs.org/ 设成淘宝的 1npm config set registry http://registry.npm.taobao.org/ 换成原来的1npm config set registry https://registry.npmjs.org/ 选装cnpm (推荐!!) 说明:因为npm安装插件是从国外服务器下载,受网络影响大,可能出现异常,如果npm的服务器在中国就好了,所以我们乐于分享的淘宝团队干了这事。!来自官网:“这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。”; 官方网址:http://npm.taobao.org; 命令安装;注意:安装完后最好查看其版本号 cnpm -v 或关闭命令提示符重新打开,安装完直接使用有可能会出现错误;1npm install cnpm -g --registry=https://registry.npm.taobao.org 注:cnpm跟npm用法完全一致,只是在执行命令时将npm改为cnpm 全局安装与本地安装npm 的包安装分为本地安装(local)、全局安装(global)两种,从敲的命令行来看,差别只是有没有 -g 而已,比如我们使用 npm 命令安装常用的 Node.js、web框架模块、express等 12$ npm install express # 本地安装$ npm install express -g # 全局安装 初始化 Blog1234567$ hexo init myblog$ cd myblog$ npm install$ git clone https://github.com/theme-next/hexo-theme-next/ themes/next$ sed -i "s~landscape~next~" _config.yml # 修改主题为 next$ hexo g -f # force generate$ hexo s -o # server and open browser 然后就可以在浏览器进行预览了。Hexo 的插件有很多,请自行安装。 自定义主题12$ mdkir -p source/_data$ cp themes/next/_config.yml source/_data/next.yml 通过修改 next.yml 就可以简单地自定义 Next 主题了。添加 keyword, 修改 scheme 等等。这些对于你来说,太简单了。 创建 Tags 与 Categories12$ hexo new page tags$ hexo new page categories 在 /source/tags/index.md 中,修改一下,添加 type,如下所示: 12345---title: Tagsdate: xxxxxxxxtype: "tags"--- 同理,在 /source/categories/index.md 中,修改一下,添加 type,如下所示: 12345---title: Categoriesdate: xxxxxxxxtype: "categories"--- 图床 Github 本身就可以作为图床,但由于 Github 主要是项目管理,资源比较珍贵,所以我们有理由找其他来代替。 七牛作为图床,也是非常好的,但会限制流量,限制空间,然而对于我这种小 Blog,足矣,所以是一个不错的选择。 微博免费提供了图片的外链功能,可作为图床,且不限制流量,不限制空间,是图床的绝佳选择。 未来有可能不能外链 外链的 URL 没有规律,到时换图床会比较麻烦 将图片上传到微博相册,然后鼠标右键就可以复制出 URL 了。有许多插件可以批量上传到微博,同时快速复制 URL。其实微博本身就提供了批量上传图片功能。有了 URL ,就可以肆意用了~ 评论区 disqus : (已经被 GFW 封杀,不谢) gitment : 使用 Github 的 issue 来作为评论区。邮件提醒,支持 GFM。 gitalk : 有团队在维护,且更加炫,与 gitment 同理。 Valine : 无后台运行,以 LeanCloud 云服务,但邮件提醒比较麻烦 hexo-gitter : 但是因为是使用 Github 的资源,而且每一个 pages 都要手动去初始化,不是很方便,还有一个重要的原因,就是 issue 是不能由博主删除,同时利用 Markdown 连接的图片,会自动上传到 Github 上面去。最后选择无后台的 valine 写文刀已擦亮,博已建成。开写: 1$ hexo new "My New Post" 相关连接 https://xuanwo.org/2015/03/26/hexo-intor/ https://zhuanlan.zhihu.com/p/26625249 http://ibruce.info/2013/11/22/hexo-your-blog/ 自动部署使用 hexo d 可以实现部署,但每次 git push 后,必须在次手动部署一下,实在是比较麻烦,此时可以利用 Github 与 Travis-CI 来实现 push 时自动部署功能。 在使用 Github 生成 token 时,有两个地方要注意: 生成时, token 只会出现一次,下次打开时,就不可见了。所以要及时保存可以用掉 要使用 token 来部署网站,所以此 token 必须拥有一些权限。例如:repo,gist。这两个选项得勾上。 使用 travis 命令行对 token 进行加密 其实现在 Travis-CI 已经可以 env 的设置了,而且还自动帮你加密了,可以不用自己加密了。所以可以不用安装 ruby, gem, travis 相关连接 http://notes.iissnan.com/2016/publishing-github-pages-with-travis-ci/ http://lotabout.me/2016/Hexo-Auto-Deploy-to-Github/ SEOGithub 禁止百度的 Spider,所以百度无法自动检索到我们建的博客。Next 主题中已经集成了百度的自制提交,直接使用就是了。然后就是 Bing,Google,提交 sitemap。更多的 SEO 方法,我就不折腾了。 https://www.bing.com/webmasterhttps://ziyuan.baidu.comhttps://www.google.com/webmasters 相关连接 https://www.jianshu.com/p/7e1166eb412a MetaTip hexo clean 可以简写为 hexo cl hexo s 之后,hexo 会监视文件更改,只要博文一保存,就可以刷新浏览器看效果。使用 hexo s -s windows 下,markdow-preview.vim 得先安装好 python3,并添加环境变量。 使用 npm 更新 package.json 中的版本12npm update -Snpm update –D 曾想仗剑走天涯 曾想仗剑走天涯后来工作忙没去 狂妄地以为自己可以制作心中的 Hexo 主题,所以受一些东西折磨: swig, ejs,都是 JavaScript 模板,可以快速生成 js 代码。还去 w3school 瞎逛自学了有一阵。 scss 与 css cdn, avatar, FontAwesome 各种 Brower 之间的不兼容 使用 gulp 对 html 的优化 相关连接 http://www.w3school.com.cn/ http://node-swig.github.io/swig-templates/docs/#variables]]></content>
<categories>
<category>Misc</category>
</categories>
<tags>
<tag>markdown</tag>
<tag>hexo</tag>
<tag>blog</tag>
</tags>
</entry>
<entry>
<title><![CDATA[ubuntu-note]]></title>
<url>%2Fblogs%2Fubuntu-note%2F</url>
<content type="text"><![CDATA[firefox 安装 adobe flashdownload flash.tar.gz file 修改网卡名称升级或者新安装了 ubuntu 16.04 之后,你会发现16.04 已经通过udev和systemd 管理的网卡命名.你ifconfig 下会发现eth0 变成了enp4s0f1 wlan0变成了wlp3s0. 由于相对比较旧的EDA工具,都只是识别出eth0这块网卡,所以我们有必要将enp4s0f1修改回eth0. 1, sudo vim /etc/default/grub 给GRUB_CMDLINE_LINUX添加参数,”net.ifnames=0 biosdevname=0”。修改后如下: GRUB_CMDLINE_LINUX=”net.ifnames=0 biosdevname=0”2, sudo update-grub 。更新grub的配置,因为修改了Bios中的命令方式,所以需要重启系统3, sudo reboot rc.local由于ubuntu的 /bin/sh 直接link到 dash (注意!不是bash)1,所以在 rc.local中,要注意脚本语法的兼容性。例如,dash是没有 ‘source’ 这命令的。例如:usr/bin/mystar >& /dev/null & # dash报错,bash和csh不会报错/usr/bin/mystar > /dev/null 2>&1 # dash兼容 /bin/sh -e 就是这个 -e ,只要任何一条命令出错,脚本就会停止执行。2,将 /bin/sh 直接软链接回 /bin/bash ln -sf /bin/bash /bin/sh libtiff.so.3 由于EDA工具使用了比较旧的工具库,所以需要从 /usr/lib/x86_64…/libtiff.so.5 软链接过去 libjpeg.so.62 可以直接使用 sudo apt install libjpeg62-dev ,但与 libtiff 冲突,所以此处使用了从 /usr/lib/x86_64…/libjpeg.so.8 软链接过去 libmng.so.1 由于EDA工具使用了比较旧的工具库,所以需要从 /usr/lib/x86_64…/libmng.so.2 软链接过去 libXi.so.6 由于 incisiv 是采用了 32bit的 libXi.so.6, 而目前的 ubuntu 一般都是64 bit的啦。所以有点问题: Ubuntu 13.10 以及 以後的發行版 64 bit 都是 multiarch意思是 如果你要從 Ubuntu 13.10 套件庫 安裝任何 32 bit 套件直接安裝 32 bit 套件就可以不必事先額外安裝任何套件 123sudo dpkg --add-architecture i386sudo apt updatesudo apt install libxi6:i386 libpng12.so.0ubuntu18.04 已经不可以直接 apt install libpng12 了。所以只能通过 deb 来安装123wget -q -O libpng12.deb http://mirrors.kernel.org/ubuntu/pool/main/libp/libpng/libpng12-0_1.2.54-1ubuntu1_amd64.debsudo dpkg -i libpng12.debrm libpng12.deb 安装 gcc 4.4 Synopsys 的 EDA 工具,有些是采用 ReadHat 4 编译而来的,而且运行其工具时,也经常要使用到相对比较老版本的 gcc 4.4。所以要安装 gcc 4.4 例如:VCS,此时的可以采用 cadence 的 IES 来暂时代替。 beyond compare 4 做好备份工作cd /usr/lib64/beyondcomparecp BCompare BCompare.bak 采用 sed 进行破解1sed -i "s/keexjEP3t4Mue23hrnuPtY4TdcsqNiJL-5174TsUdLmJSIXKfG2NGPwBL6vnRPddT7tH29qpkneX63DO9ECSPE9rzY1zhThHERg8lHM9IBFT+rVuiY823aQJuqzxCKIE1bcDqM4wgW01FH6oCBP1G4ub01xmb4BGSUG6ZrjxWHJyNLyIlGvOhoY2HAYzEtzYGwxFZn2JZ66o4RONkXjX0DF9EzsdUef3UAS+JQ+fCYReLawdjEe6tXCv88GKaaPKWxCeaUL9PejICQgRQOLGOZtZQkLgAelrOtehxz5ANOOqCaJgy2mJLQVLM5SJ9Dli909c5ybvEhVmIC0dc9dWH+/N9KmiLVlKMU7RJqnE+WXEEPI1SgglmfmLc1yVH7dqBb9ehOoKG9UE+HAE1YvH1XX2XVGeEqYUY-Tsk7YBTz0WpSpoYyPgx6Iki5KLtQ5G-aKP9eysnkuOAkrvHU8bLbGtZteGwJarev03PhfCioJL4OSqsmQGEvDbHFEbNl1qJtdwEriR+VNZts9vNNLk7UGfeNwIiqpxjk4Mn09nmSd8FhM4ifvcaIbNCRoMPGl6KU12iseSe+w+1kFsLhX+OhQM8WXcWV10cGqBzQE9OqOLUcg9n0krrR3KrohstS9smTwEx9olyLYppvC0p5i7dAx2deWvM1ZxKNs0BvcXGukR+/g" BCompare 禁止bcompare联网查 licenseadd “127.0.0.1 scootersoftware.com” to /etc/hosts 再上网找 licenselicense:3VBz7pP0AZAbbQAFMVJp3VrZUPEVdJlv4OC9baY5mDS-Xah45ux44fRLN4fnBq46aUftmLNsYiwyayebJk2rMfSstmAgavsqoQfFLyHTOY94ozKYF1-ODbBigieKGqgGpNMOLFdtdB08FZy7P252sh1X4UbUoH8xWIlz6D0dfPMFaC7vXnDP4-Ck1A6K0CaCSVbcrWoWTmlPqKvRVu9wlNvV1KGr3C+GVf2edawekH3EbiE2Nkxz5fDaoQetwPEVU+GDdOF1zhrytrdICBnTQkkSE5UvJDGGx38l6PQ13BoaBW2hSHy5xxk4M8cfIcLTM7fOGfBBY5mRhe5aLoZQCU perl 安装 modules出现了如下错误时,Can't locate IO/File.pm in @INC时,可以使用下面语句进行安装:12sudo perl -MCPAN -e shellinstall IO::Tee 从Ubuntu 18.04 LTS升级到Ubuntu 18.10版本的方法1.更新步骤: 打开“软件和更新”应用 点按“更新”标签 找到标题为“通知我新的Ubuntu版本”的部分 将“For long-term support versions”设置为“For any new version” 点击“关闭” 终端中执行sudo update-manager -d -c(或者:sudo update-manager -c)命令 2.另外一种方法就是使用命令行,运行下面命令: sudo do-release-upgrade -d(或者:sudo do-release-upgrade)]]></content>
<categories>
<category>System</category>
<category>linux</category>
</categories>
<tags>
<tag>linux</tag>
<tag>ubuntu</tag>
</tags>
</entry>
<entry>
<title><![CDATA[IC 学习记录]]></title>
<url>%2Fblogs%2FICLearning%2F</url>
<content type="text"><![CDATA[设计流程 原理图或RTL设计 功能仿真(行为级仿真) 综合系统 提取综合的单元特性,器件延时信息。进行带延时信息的仿真 Place & Route。在这个阶段,进一步提取含布线延时的时序信息 可使用Synopsys Prime Time(PT)进行静态时序分析 使用模拟(信号)仿真器进行细节仿真。生成GDSII文件(也叫stream文件) 送至foundry制造商进行芯片制造。 Cadence EDA ToolCadence公司设计平台DFII开发套件中,集成了众多EDA Tools(有些是被Cadence公司收购后集成到DFII平台中去的),这个DFII已经可以完成从原理图输入到芯片的整个开发过程。 Composer全能的原理图输入工具 NC_VerilogVerilog-XL是Cadence的一个解释仿真器。“解释”是指有一个运行的时间解释工具执行每一条Verilog指令并且与事件队列(Testbench)进行交流。 NC_Verilog是属于IUS的。NC_Verilog是Cadence的一个编译仿真器,它把Verilog代码编译成Verilog程序的定制仿真器。即它把Verilog代码转换成一个C程序,然后再把该C程序编译成仿真器。因此它启动稍微慢一些(需要转换与编译),但这样生成的编译仿真器运行要比Verilog-XL的解释仿真器快得多。所以被广泛使用。 SimVision查看波形的软件 RTL Compiler综合工具 Spectre模拟仿真器。此工具也可以实现模拟/数字的混合仿真。同时还包含了功耗测量功能 SOC Encounter布局布线工具。包含电源的布局、时钟树的综合等等东西 Virtuoso版图设计工具 Synopsys EDA ToolVCSVCS也是一个编译仿真器,功能强大,有众多选项配置 Design Compiler : DC综合,要配置综合环境,配置Lib、配置约束。综合后可以查看面积、时序、功耗等。大多数的EDA Tool工具,都使用了Tcl脚本进行配置,包括DC。DC中还提供了许多IP(DesignWare) Design Vision是一个DC的GUI软件工具。可以比较方便地查看关键路径等等。 PT知识点 绝大多EDA Tool都运行之前都需要配置一定的软件环境(如:环境变量、Lib等等),Tool在使用之前,还需要配置Project(如:添加RTL文件、定义全局macro等等)。且不同的Tool可能还会有少许冲突,所以一般建议使用Script进行启动EDA Tools。 Latch与Flip-Flop的区别在于寄存时的触发方式。Latch是使用电平触发,FF是采用时钟触发;RTL开发时,要尽量避免使用Latch。 TestBench是指测试程序,属于软件;在集成电路的情况中,等测试芯片称为DUT(Device Under Test),原本是属于硬件的,但后来其术语含义也扩展到软件层面上。这样待测的RTL模块也可称为DUT。 Verilog仿真器一般是需要Verilog模型的?即使使用Schematic输入,也需要有Schematic对应的Verilog模型。 Schematic视图 与 Behavioral视图 VCS仿真,可以为代码设计断点,并可单步运行代码 行为级仿真 与 开关级仿真 成对 仿真时间选项,有具体延时(如:assign #2 a = b;)、零延时(唯一的延时是通过时钟控制寄存器的时钟级延时)、单位延时、SDF格式标注的延时(Standard Delay Format)。 Q & A 形式验证是什么? DFT是如何插入的?是在RTL coding时就编写进去的吗? CAD(computer aided design 计算机辅助设计)设计工具,与EDA(electronic design automation 电子设计自动化)工具,分别是指哪些? UVM验证方法? awk与sek是什么script?不是就两条command麽? NC_Verilog 与 IUS 是关系是什么? IUS与Cadence的开发平台DFII又有什么关系? NC_Verilog仿真也是要生成仿真网表(netlist),这网表与综合的网表一不一样? NC_Verilog即要编译Verilog、又要生成网表,是这样子的吗? 仿真时有Behavioral视图、cmos_sch视图、functional视图。这些于我有什么区别?有什么作用? DC的startup文件,包含了许多Library。什么target_library、synthetic_library、link_library、symbol_library。这些lib各自有什么作用?]]></content>
<categories>
<category>ASIC</category>
</categories>
</entry>
<entry>
<title><![CDATA[图像处理基础知识点]]></title>
<url>%2Fblogs%2Fdigital-image%2F</url>
<content type="text"><![CDATA[梯度图像梯度可以把图像看成二维离散函数,图像梯度其实就是这个二维离散函数的求导: 图像梯度: G(x,y) = dx(i,j) + dy(i,j); dx(i,j) = I(i+1,j) - I(i,j); dy(i,j) = I(i,j+1) - I(i,j); 其中,I是图像像素的值(如:RGB值),(i,j)为像素的坐标。 图像梯度一般也可以用中值差分: dx(i,j) = [I(i+1,j) - I(i-1,j)]/2; dy(i,j) = [I(i,j+1) - I(i,j-1)]/2; 图像边缘一般都是通过对图像进行梯度运算来实现的。 上面说的是简单的梯度定义,其实还有更多更复杂的梯度公式。 LENS焦距 光圈 鱼眼效果 视角 畸变 YUV 与 YCbCr因为我是半路出家的人,YUV YCbCr这两个东西,我刚开始总粗略地把他们认为是完全一样的。其实不可以简单地认为是完全一样(至少名字就不一样,是吧,哈哈)。CbCr,b是blue,r是red,这明显分别就是蓝色色差与红色色差呗。 Q & A 镜头中的“4mm”、“8mm”、“12mm”、“24mm”是指什么?焦距? 镜头中的“1/4””、“1/12””、“1/2.5””又是指什么?]]></content>
<categories>
<category>数字图像</category>
</categories>
</entry>
<entry>
<title><![CDATA[OmniVision Sensor 芯片]]></title>
<url>%2Fblogs%2FOmniVision%2F</url>
<content type="text"><![CDATA[OmniVisionOmniVision公司(简称OV),美商半导体公司,中文名豪威科技,成立于1995,专业开发高度集成 CMOS 影像技术。公司的创始人是经验丰富的工业专家,该公司主要创始人多半出身于摩托罗拉。2000前后,OmniVision的CMOS Sensor占据最大市场份额,然而时过境迁,现在是索尼的CMOS成为手机CMOS市场份额第一的厂商。如今的OV,难逃被收购的命运,目前已经被天朝财大气粗的公司收购了。 这段时间一直在研究OV9715 Sensor的配置。手头只有DataSheet一份,而且是2009年!之后发现OV公司对技术的保密还是十分严谨,写的DS也十分保守,N多register都“Reserved”却又是关键。如果你不是从正规渠道获取OV的产品,你是根本无法得到技术支持,网络上流出来的OV芯片配置,也都注释甚少。所以现在才明白,像这类技术公司,卖的不止芯片,还有支持。各种NDA,各种Reserved。 注;闭源的东西,如果你没钱,那东西就有许多坑。 OV9715 or OV9712Sensor架构OV9715与OV9712是同一系列的芯片,架构、寄存器地址也都基本一致。要对芯片配置,还是有必要清楚其芯片的架构,知道reg作用于架构中哪一个部分,也就可以比较清晰地知道会reg会产生哪些作用。 架构主要被分为四大部分。每个模块各司其职 image sensor core image sensor processor image output interface controller image sensor core这是一个模数混合的部分。包括了Sensor、模拟gain、ADC、BLC、AEC、AGC、Colorbar、数字gain等等。多是挺多的,只是不是我研究方向。我目前只研究里面的分辨率、Colorbar。 Resolution芯片第一个模块Sensor Array,DS中reg说明如果有指明作用于Sensor,一般就都是指作用此模块。这个模块使用的是SYSCLK。最大可支持1280x800的分辨率,此模块的输出分辨率是可以进行修改的。 通过reg 0x12中的HT2、VT2,实现H V的降采样(DownSample)。当然是以一半来采样的啦~ 也就是说: 配置HT2,则经DSP后最终最大输出 640x800 配置VT2,则经DSP后最终最大输出 1280x400 配置HT2、VT2,则经DSP后最终最大输出 640x400 不配置的话,就…… :) 通过reg 0x17~0x1a 0x32 0x03,可以配置Sensor Array的起点与输出pixel长度,这就实现了图像的第一次crop。 我的理解是,crop出来的图像分辨率,不可以超出DownSample之后分辨率。据流传出来的OV配置,配置Sensor输出给DSP的分辨率都要比最终输出略大一点。 Color Bar reg 0x12可以配置 color bar with pixel overlay. reg 0x97可以配置 color bar without pixel overlay. 配置了reg 0x97,那么reg 0x12就无效了。 ColarBar其实是TestPattern其中一种,reg 0xca还可以对TestPattern配置。据我实际下板,配置TestPattern mode,出来的是很奇怪的细白竖条。选择“No test pattern”反而可以正常出ColorBar 其他研究了整个DS的reg配置(许多Reserved不算),确认了OV9715只输出raw RGB。 image sensor processor这部分是不是可以简称为isp,与DS中的ISP是否同一个意思,我暂时没有去考究。这部分也包含挺多模块,LENC、WBC、YAVG、sub-sample。这一堆也无暇折腾,我所要的,不过分辨率,PCLK,Frame Rate。这些坑,就让我一一道来吧。 DSP Resolution。这是最终输出的分辨率,你要1280x800,就请准确配置reg 0x57~0x59 PCLK。首先要知道tp=1/SYSCLK,然后DS中又指出可配置为PCLK=SYSCLK,PCLK=SYSCLK/2。通过DSP的reg 0x3bDownSample就可以将PCLK配置为SYSCLK的一半。DownSample的作用就是只取一半的pixels呗。 这里有个常见的640x400的常见配置,Sensor Horizontal size配置为1296,DSP使用DownSample并DSP Horizontal size就只配置640。好处就是获取Horizontal最大视野。 fps。与诸多reg有关。就放置到DVP那边解释吧。 image output interface上图,不解释 这部分与fps关系密切,DS只是隐晦地说那些(1) (2) …可以由reg进行配置,留下巨坑让你跳。其实我还没从这坑爬出来呢。 (1),也就是frame的时长。由(2) (3) (4) (5)共同组成。reg 0x3d 0x3e配置line / frame,即(1)中有多少个(4)。 (2),这个种类很多,要分情况配置。DS的figure 6-2列出了3种 vsync_old (略) vsync_new 可以由reg 0xc8配置 vsync3 可以由SOF,也可由vsync_widthx64。reg 0xc9 0xca可以配置vsync_width确定;SOF呢?由reg 0x4b 0x4c配置的吧,reg的单位与reg 0x3d 0x3e一样,line为单位 (3),好像不用配置 (4),reg 0x2a 0x2b配置,单位为 tp。这个是可以确定的 (5),reg 0xcd~0xcf,这个也是vsync3的24bit可编程延时。(5)也叫 eof2v_dly h2v_dly。 (6),这个是DSP Horizontal size。reg 0x57 0x59,单位为PCLK。 (7),=(4)-(6)。 (8)、(9)这关键的两个东西,我目前还没搞清楚。在DS中看到reg 0x30 0x31,但实际测试,修改这两个寄存器对(8) (9)不起作用。(坐等高人) 这些(1) (2)等要正确配置,否则就导致VSYNC信号一直高电平(或低电平)。我推算出来的fps计算式子:fps=sysclk/(reg 0x3d 0x3e * reg 0x2a 0x2b)。而且OV9712的最大输出是 1280x800@30fps(640x400@60fps),所以在配置fps要合理。 OV9712的HREF mode,即默认的mode,也是最常见的Sensor的输出时序。 OV9712的HSYNC mode,可以算是BT601建议的输出时序,在Vertical Blank中,也是有HSYNC信号输出。SOF之后第一个active line的延时(即(3))是要知道嘀,以line为单位会比较符合BT601的标准,也更好控制些。(8)、(9)也是必须知道,方可正确取出active pixel。BT601建议的场信号,OV9712似乎并没有实现。 controllerOV在IIC上折腾出SCCB总线,可2 wires,可3 wires。3 wires是为实现相同device ID,却能挂载多个Slave,或许还有其他目的,懒得知道~你只要记住,SCCB这货是兼容IIC,足矣~ 必须知道的:SCCB是reg addr与data都是8bit操作的。Device ID=0x60,OV9715与OV9712都使用相同的ID。 注:OV的power down模式,与MT9系统Sensor的Standby,控制方式刚好相反。OV的PWDN拉高即为power down;MT的Standby_n拉低即为power down。 与众不同 vsync的极性,default是场消隐时为高电平; BT656并没有按照建议书传输yuv422,而是直接传输RawData。RawData值有可达到“0xFF”,“0x00”,这些与BT656中的视频计时基准码会冲突。当然,一般情况下还是可以正常工作的。 Reg配置参考OV9715与OV9712的寄存器基本一致,网络上流传出来的芯片配置也主要是针对的OV9712,但对于OV9715还是有比较大的参考作用。 下面是我整合之后的reg配置 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263// Core setting 不要问我,我什么都不知道iic_write_data(OV, 0x1e, 0x07);iic_write_data(OV, 0x5f, 0x18);iic_write_data(OV, 0x69, 0x04);iic_write_data(OV, 0x65, 0x2a);iic_write_data(OV, 0x68, 0x0a);iic_write_data(OV, 0x39, 0x28);iic_write_data(OV, 0x4d, 0x90);iic_write_data(OV, 0xc1, 0x80);// iic_write_data(OV, 0x0c, 0x30);// iic_write_data(OV, 0x6d, 0x02);// iic_write_data(OV, 0x4d, 0x90);// iic_write_data(OV, 0xc1, 0x80);//DSPiic_write_data(OV, 0x96, 0xf1); // AEC AWB ...// iic_write_data(OV, 0xbc, 0x68);/* Resolution and Format */iic_write_data(OV, 0x12, 0x00); // VT2[6] HT2[0] Sensor Down sampleiic_write_data(OV, 0x3b, 0x01); // DSP Down sample,配置为1,使 PCLK=SYSCLK/2iic_write_data(OV, 0x97, 0x80); // 自己看DSiic_write_data(OV, 0x17, 0x25); // HStart MSB = 37*8+7 = 303,跳过黑边iic_write_data(OV, 0x18, 0xA2); // HSize MSB = 0xA2*8+ 0 = 1296iic_write_data(OV, 0x32, 0x07); // HStart[2:0]LSB, HSize[5:3]LSBiic_write_data(OV, 0x19, 0x01); // VStart MSB = 1*4+ 2 = 6iic_write_data(OV, 0x1a, 0x78); // VSize MSB = 120*4+2 = 482iic_write_data(OV, 0x03, 0x0a); // VStart[1:0]LSB, VSize[3:2]LSBiic_write_data(OV, 0x98, 0x00); // offset of pre_win outiic_write_data(OV, 0x99, 0x00);iic_write_data(OV, 0x9a, 0x00);iic_write_data(OV, 0x57, 0x00); /*DSP output HSize[4:2] VSize[1:0] LSB */iic_write_data(OV, 0x58, 0x78); /*DSP output VSize MSB = 120*4+0 = 480 */iic_write_data(OV, 0x59, 0x50); /*DSP output HSize MSB = 80*8+0 = 640 */iic_write_data(OV, 0x4c, 0x0b); // hi 640x400:0x99a 1280x800:0x1336iic_write_data(OV, 0x4b, 0x70); // low 经过示波器观察,是配置SOF、EOFiic_write_data(OV,0xbd, 0x50); // 0x50*8=640iic_write_data(OV,0xbe, 0x78); // 0x78*4=480// iic_write_data(OV,0x2c, 0x60); // I don't know.// iic_write_data(OV,0x23, 0x10);/* Clock */iic_write_data(OV,0x5c, 0x73); // CLK1 = XCLK/PLL_pre_divider; PLL_pre_divider:REG5C[6:5]; CLK2 = CLK1*(32-REG5C[4:0])iic_write_data(OV,0x5d, 0x00); // CLK3 = CLK2/(REG5D[3:2]+1)iic_write_data(OV,0x11, 0x00); // SYSCLK = CLK3/((REG11[5:0]+1)*2)iic_write_data(OV,0x3e, 0x03); // Line / Frame hi 此处是指有多少个(0x2a、0x2b)iic_write_data(OV,0x3d, 0x7f); // Line / Frame low 是fps的一个配置量iic_write_data(OV,0x2b, 0x06); // Tp of Hsync hi 1688iic_write_data(OV,0x2a, 0x98); // Tp of Hsync low 我理解为包含行消隐的line长度// iic_write_data(OV,0xd0, 0x06); // line length hi 疑点// iic_write_data(OV,0xd1, 0x98); // Line length lowiic_write_data(OV,0x2d, 0x00); //Dummy line LSB DS中说是作用于Night Modeiic_write_data(OV,0x2e, 0x00); //Dummy line MSB// DVPiic_write_data(OV,0xc2, 0x81); // vsync3 vsync_width//Generaliic_write_data(OV,0x13, 0x85);iic_write_data(OV,0x14, 0x40); // analog gainiic_write_data(OV, 0x04, 0x48);// Vertical flip 疑点重重 HSYNC mode 中(8) (9)由哪个reg配置的? reg 0x30 0x31与HSYNC mode有关系麽?与(8) (9)什么关系? reg 0xd0 0xd1与reg 0x2b 0x2a之间是什么关系? reg 0xcaTest Pattern中的目的与作用是什么? 欢迎各位跟我讨论,更加欢迎帮我分析疑点。]]></content>
<categories>
<category>数字图像</category>
</categories>
<tags>
<tag>OmniVision</tag>
<tag>OV</tag>
<tag>sensor</tag>
</tags>
</entry>
<entry>
<title><![CDATA[音视频接口标准(一)]]></title>
<url>%2Fblogs%2Faudio-if%2F</url>
<content type="text"><![CDATA[一些基本概念声音 振幅:音量大小 频率:尖锐程度 次声波 可听声波 超声波 <20Hz 20Hz ~ 20kHz >20kHz 语音信号频率范围:300Hz ~ 3kHz 数字化模拟信号 –> 采样 –> 量化 –> 编码 –> 数字信号 采用频率 位数 声道数 11.025kHz 8 bit = 256 单声道 22.05kHz 16 bit = 65536 立体声 44.1kHz Note: 立体声即两声道Note: 立体声也可8bit、也可11.025kHz。 音频数据量=采样频率x量化位数x声道数 B/s * 采用频率:11.025kHz 22.05kHz *44.1kHz* 48kHz * 位数:8bit 16bit * 声道数:单声道 立体声 数字音频压缩(编解码)IISI2S(英语:Inter-IC Sound或Integrated Interchip Sound)是IC间传输数字音频数据的一种接口标准,采用序列的方式传输2组(左右声道)数据。I2S常被使用在发送CD的PCM音频数据到CD播放器的DAC中。由于I2S将数据信号和时钟频率信号分开发送,它的抖动(jitter)有损十分地小。 音响数据的采集、处理和传输是多媒体技术的重要组成部分。众多的数字音频系统已经进入消费市场,I2S(Inter—IC Sound)总线, 又称 集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频数据传输而制定的一种总线标准,该总线专责于音频设备之间的数据传输,广泛应用于各种多媒体系统。它采用了沿独立的导线传输时钟与数据信号的设计,通过将数据和时钟信号分离,避免了因时差诱发的失真,为用户节省了购买抵抗音频抖动的专业设备的费用。 I2S总线接口可作为一个编码解码接口与外部8/16位的立体声音频解码电路(CODEC IC)相连,从而实现微唱片和便携式应用。它支持I2S数据格式和MSB-Justified 数据格式。I2S总线接口为先进先出队列FIFO的访问提供DMA传输模式来取代中断模式,可同时发送和接收数据,也可只发送或接收数据。 I2S总线规范在飞利浦公司的I2S标准中,既规定了硬件接口规范,也规定了数字音频数据的格式。 I2S由3条传输线组成: * 比特时钟频率线(*BCLK*: bit clock line) 或串行时钟(SCLK); BCLK的频率=2×采样频率×采样位数。 Note:2个声道 * 左右时钟频率线(*LRCLK*:left right clock line) 或字元选择线(WS:word select line) * *至少* 一条串行复合数据线(SDATA:time-multiplexed data)就是用二进制补码表示的音频数据。 也有可能找到以下这些线: * 主时钟频率:256个典型的左右时钟频率线(MCLK= 256*LRCLK) (也有是384倍,即MCLK=384*LRCLK) * 上传数据的复合消息(multiplex)线 I2S由前述的比特时钟频率、字元时钟频率和数据三条线所组成。当新的数据被放到数据在线时,比特时钟频率就会跳动一次。I2S的数据线允许两个轨道的数据同时发送,而字元选择时钟频率能让接收设备知道现在正在发送轨道1或轨道2的数据。每个轨道可传输32位的数据,所以显而易见地,字元选择时钟频率和声音的采样率时钟频率是相同的。比特时钟频率即是采样率时钟频率的64倍,44.1KHz x 2个声道 x 32位 = 2.8224MHz。 LRCLKLRCLK为“1”表示正在传输的是右声道的数据,为“0”则表示正在传输的是左声道的数据。(也可配置为LRCLK为“1”时表示传输左声道,“0”传输右声道 )LRCLK必须与BCLK保持同步,通常LRCLK的下降沿同步于BCLK下降沿,LRCK的频率等于采样频率。 LRCLK可以在串行时钟的上升沿或者下降沿发生改变,并且LRCLK信号不需要一定是对称的。在从属装置端,LRCLK在时钟信号的上升沿发生改变。LRCLK总是在最高位传输前的一个时钟周期发生改变,这样可以使从属装置得到与被传输的串行数据同步的时间,并且使接收端存储当前的命令以及为下次的命令清除空间。 SDATAI2S的数据是采用二进制 补码 表示音频数据,从高比特(MSB)发送至低比特(LSB),从字元选择时钟频率的左端开始,加上 一个比特时钟 频率的延迟,即数据将比字元选择时钟频率要慢一个比特时钟频率。(飞利浦规定的格式,I2S格式, 最常用的吧 ) 也有左校正(Left Justified, 较少使用 )的I2S数据流,它没有比特时钟频率的延迟,数据和字元选择时钟频率是同步的。 右校正(Right Justified,也叫日本格式、普通格式)则是数据比字元选择时钟频率快一个比特时钟频率。 I2S发送端在BCLK下降沿发送数据、I2S接收端在BCLK上升沿接收数据 这就使得接收端与发送端的有效位数可以不同。如果接收端能处理的有效位数少于发送端,可以放弃数据帧中多余的低位数据;如果接收端能处理的有效位数多于发送端,可以自行补足剩余的位。这种同步机制使得数字音频设备的互连更加方便,而且不会造成数据错位。为了保证数字音频信号的正确传输,发送端和接收端应该采用相同的数据格式。当然,对I2S格式来说数据长度可以不同。 时序要求(略) 其他master 的问题对于系统而言,产生BCLK和LRCLK的信号端就是主设备(master) +-------------+ +----------+ | Transmitter | --> | Receiver | | (master) | --> | (slave) | | | --> | | +-------------+ +----------+ +-------------+ +----------+ | Transmitter | <-- | Receiver | | (slave) | <-- | (master) | | | --> | | +-------------+ +----------+ +-----------+ | Controler | | (master) | +------+-+--+ | | +-------------+ | | +----------+ | Transmitter | <-+-+---> | Receiver | | (slave) | <---+---> | (slave) | | | --------> | | +-------------+ +----------+ note: 画得太难看了。不可取! SDATA 的实际情况I2S标准上规定的SD线,应该是复合的( 双向的? ),如STM32中的I2S SD就是采用inout类型的。 市场上许多音频codec芯片的I2S都是采用4个IO口,其中SD线分为ADCDAT线与DACDAT线,如WM8987。把LRCLK分为ADCLRC和DACLRC两个IO口。如WM8731 个人鄙见,要符合标准,当然还要适合市场的实际情况(兼容市场的情况) 多通道的I2S或许可以参考SPI、IIC之类的总线,添加一个sel信号,添加一些开关电路,进行通道选择。 PDM脉冲密度调制 Q & A 线性音频输出?]]></content>
<categories>
<category>数字图像</category>
</categories>
<tags>
<tag>IIS</tag>
<tag>audio</tag>
</tags>
</entry>
<entry>
<title><![CDATA[音视频接口标准(二)]]></title>
<url>%2Fblogs%2Fvideo-if%2F</url>
<content type="text"><![CDATA[接口基本概念VGA XGA UXGA SVGA HDMICCIR 与 ITU-R国际无线电咨询委员会(International Radio Consultative Committee),CCIR是国际无线电咨询委员会的简称。成立于1927年,主要职责是研究无线电通信和技术业务问题,并对这类问题通过建议书。从1993年3月1日起,与国际频率登记委员会(IFRB)合并,成为现今国际电信联盟(ITU)无线电通信部门,是国际电信联盟(ITU)的常设机构之一,简称ITU-R。 在CCIR与IFRB合并之前,CCIR已经就电视演播室数字编码提出了CCIR601号与CCIR656号建议,并深入市场。与IFRB合并之后,CCIR易名,成ITU-R。相应的建议书也就变成ITU-R BT601与ITU-R BT601。因为CCIR601(与CCIR656)都是已经广泛应用,所以你说CCIR601别人也会知道是指ITU-R BT601的 常用于芯片间的视频接口标准,有BT656、BT601,支持高清接口有BT1120。ITU-R BT656及BT601, 其实都只是推荐标准,所以厂商可以根据自身需要修改接口的时序(当然芯片厂商没事也不会去修改这些接口时序的) ITU-R BT.601BT601是比较早提出来的,用于SDTV。标准规定了:数字编码形式、每一数字有效行的样本数量、采样频率、码字的用法、采样结构等。但并没有详细地对pin、时序、处理时钟这些传输进行详细规定,只是建议支持并行接口、串行接口。所以这导致了芯片厂商的BT601接口经常模糊不清或者厂商间接口不兼容问题(这是一个坑,厂商有时不指出是BT601,直接自己取名字。如OmniVision的Sensor芯片,弄出个HSYNC mode。) 支持标准4:3和宽屏16:9显示宽高比,主要是为演播室数字电视编码参数(现在可不是,现在多用于芯片间的接口)。具体的内容,看看标准就可以知道。 BT601没有规定接口时序,但以我多年(小于一年)研究BT601和看过多款(小于三款)芯片接口的经验,我可以总结出目前市场上BT601的大致接口(至于你信不信,反正我是信了)。 vsync_field, hsync, data 三类pin。 hsync是一直有规律地出现,并不会因为处于场消隐而不出现。 有hsync offset的东西,hsync并不与active data严格对齐。 注:此处的vsync在消隐时为高电平,href与hsync是同一管脚。(这图是参考OmniVision的DVP画的) 有些视频数据有分前后场,此时就有field信号,field与vsync是共用同一管脚。 ITU-R BT.656BT656其实是BT601接口的一个补充,使用BT601中yuv422(OmniVision也使用BT656传输RawData)、比特串行传输的建议。BT656建议书的描述使用未压缩PAL或NTSC系统(目前也支持许多不同的分辨率,建议书只是以PAL、NTSC为例子)。在BT601建议书中,包含了模拟部分和数字部分,BT656是针对其数字部分的建议。BT656标准将串行接口细化,采用内嵌同步码的同步方式。BT656是最常用的接口,后来为支持高清,提出了BT1120。 数字描述BT656及BT601的数字信号格式使用了8或10比特编码字的二进制信息,数字字的内容用十六进制形式的10比特表示法描述。 10比特:1001000101比特模式表示为91.4h;(BT656-5则表示为245h) 8比特:10010001比特模式表示为91h; BT656-4推荐书的描述8比特字占据了10比特字中左边最重要的比特(也就是最高8位)。即从比特9至比特2。其中比特9是最为重要的比特。 数字格式八个最重要比特全设为1或全设为0的数据字被保留用于数据辨别,因此可用的256个8比特字中仅有254个,或可用的1024个10比特字中的1016个可用于表述信号值。视频数据使用YUV422中的UYVY格式(即 Cb,Y,CRY ),其中UYV是共站亮度和色差抽样,而紧接着的Y字对应下一个亮度抽样。一个UYVY即为一个word,传输速率为27Mword/s。要知道,YUV422的UV是每两个像素传输一次,Y是每个像素都传输。 视频计时基准码(SAV,EAV)现存在两个计时基准信号,一个位于各视频数据块的发端(活跃视频的起点,SAV),另一个则位于各视频数据块的末端(活跃视频的终点,EAV)。 ... U Y V Y U Y V Y FF 00 00 XY 80 10 80 10 ... 80 10 80 10 FF 00 00 XY U Y V Y U Y V Y ... 每个计时基准信号包括一个四字序列,格式为:FF 00 00 XY。(数值用十六进制计数法表示。)前三个字是固定的前导码。第四个字包括的信息定义场2的标识,场消隐的状态和行消隐的状态。 | 数据比特编号 | 第一个字 | 第二个字 | 第三个字 | 第四个字(XY) ||:——:+:—–:+:—-:+:—-:+:—–:|| 9(MSB) | 1 | 0 | 0 | 1 || 8 | 1 | 0 | 0 | F || 7 | 1 | 0 | 0 | V || 6 | 1 | 0 | 0 | H || 5 | 1 | 0 | 0 | P3 || 4 | 1 | 0 | 0 | P2 || 3 | 1 | 0 | 0 | P1 || 2 | 1 | 0 | 0 | P0 || 1 | 1 | 0 | 0 | 0 || 0(LSB) | 1 | 0 | 0 | 0 | F=0 场 0F=1 场 1 V=0 非消隐期间V=1 消隐期间 H=0 SAVH=1 EAV 上图是10bit接口的数值,与现有的8比特接口匹配时。最低两位没有定义。同理,当是12bit接口时,计时基准信号XY占据12bit中最高8bit。 在接收机端,P3,P2,P1,P0是1位误码纠错和2位误码检错的功能(采用自动纠错码,即海明检验码),P的一些状态取决于比特F、V和H的状态。 P0=F^V^H P1=F^V P2=F^H P3=V^H 关于纠错检错的推理,留给你们自己推算(或者查阅相关资料)吧。 注:发现OV9712芯片可以对BT656的计时基准码进行配置,具体怎么配置,作用是什么,就没有研究清楚 辅助数据辅助信号应遵循ITU-R BT.1364建议书的规定。(没搞懂) 数字消隐数字消隐间隔期间出现的,并未用作计时基准码或辅助数据的数据字使用80.0h、10.0h、80.0h、10.0h(八位数据时,即为80h、10h、80h、10h,刚好对应y#16,cb,cr#128)等序列填充,分别与C~b~,Y,C~R~,信号的消隐电平相对应,恰当地置于复用数据中。, OmniVison输出的数字消隐,可使用80h、10h、80h、10h来填充,也可使用空白来填充。 其他一些常见标准 BT709 这是一个与BT601类似的标准,但其针对的是HDTV。(时代在进步,标准也要跟上嘛) bt1120 这是与BT656类似的标准,也包含了SAV、EAV的计时基准。是BT709的接口细化,支持HDTV BT1700(行编号) BT1364(承载分组数据) 疑点重重 BT656所说的传输速率27Mword/s。一个word又是指“UYVY”。这个传输速率是指并行传输的吗?如果是串行传输,那么Pixel Clock岂不是要54MHz,而发送时的Clock岂不是要108MHz了?? 海思中指出:支持BT656、BT601、DC timings。同时又说支持SMPTE293M/ITU-R BT1358(480p/576p)、SMPTE296M timing(720p)]]></content>
<categories>
<category>数字图像</category>
</categories>
<tags>
<tag>bt656</tag>
<tag>bt1120</tag>
<tag>HDMI</tag>
</tags>
</entry>
<entry>
<title><![CDATA[人体检测算法 HOG]]></title>
<url>%2Fblogs%2FHOG%2F</url>
<content type="text"><![CDATA[人体检测HOG的人体检测,算法的好坏,也只能靠统计的方法来定量衡量。 训练HOG特征SVM分类拓展一下软硬结合的实现方案RTLHOG特征值,是占用最计算量,在使用CPU软件实现方案中消耗最长的计算时间。为提高实时性,此部分必须由RTL来提速。 Software视频计时基准码(SAV,EAV)现存在两个计时基准信号,一个位于各视频数据块的发端(活跃视频的起点,SAV),另一个则位于各视频数据块的末端(活跃视频的终点,EAV)。 ... U Y V Y U Y V Y FF 00 00 XY 80 10 80 10 ... 80 10 80 10 FF 00 00 XY U Y V Y U Y V Y ... 每个计时基准信号包括一个四字序列,格式为:FF 00 00 XY。(数值用十六进制计数法表示。)前三个字是固定的前导码。第四个字包括的信息定义场2的标识,场消隐的状态和行消隐的状态。 | 数据比特编号 | 第一个字 | 第二个字 | 第三个字 | 第四个字(XY) ||:——:+:—–:+:—-:+:—-:+:—–:|| 9(MSB) | 1 | 0 | 0 | 1 || 8 | 1 | 0 | 0 | F || 7 | 1 | 0 | 0 | V || 6 | 1 | 0 | 0 | H || 5 | 1 | 0 | 0 | P3 || 4 | 1 | 0 | 0 | P2 || 3 | 1 | 0 | 0 | P1 || 2 | 1 | 0 | 0 | P0 || 1 | 1 | 0 | 0 | 0 || 0(LSB) | 1 | 0 | 0 | 0 | 困难重重]]></content>
<categories>
<category>数字图像</category>
</categories>
<tags>
<tag>识别</tag>
</tags>
</entry>
<entry>
<title><![CDATA[Xilinx与ISE]]></title>
<url>%2Fblogs%2Fxilinx-ise%2F</url>
<content type="text"><![CDATA[前言内容可能比较简单与基础。这其实是写给我自己看的,做一些简单的记录,方便以后使用时的查找。 我所知道的不多。——某名人言 简介Xilinx所说是发明FPGA的公司,目前(2015年)其最大的竞争者Altera公司已经被Intel收购了。 ISE这是Xilinx推出的一款综合性的EDA软件工具,集成了设计输入、综合、仿真、布局布线、下载。当然这些可以由第三方提供的软件来完成。什么Synplify、Modelsim、Verdi、Matlab等等。这些第三方工具的版本,必须与ISE的版本对应,否则可能就用不了咯。 积累设计输入创建cdc文件,Chipscope,添加所需要查看的节点等,选取采样深度编写ucf约束文件,分配管脚、约束时钟。也可以采用界面化的设置,不过也挺复杂的样子。 可HDL输入、IP核输入、原理图输入等。在Verilog语言中,Xilinx还自己弄了许多“原语”,其格式与Verilog的例化十分相似,但不同的是,它!不属于例化,在hierarchy中是看不到的,这些原语,有点类似于C语言里面的内联函数,可能它只是把一代代码嵌入到对应的Verilog中吧。 IP核的添加调用IP核的时候,ISE会生成包含所有ip核配置信息的“.xco”文件,同时此文件似乎还记录所需文件的路径。工程里面只需要添加“.xco”文件,就包含了所有的文件了,虽然工程里面还是没有看到这些文件,但已经定义了。 仿真仿真之前,如果安装的modelsim不是Xilinx版本的(即不是modelsimXE),那仿真之前一定要先编译仿真库文件,先指定好库文件的位置(指定为:x:\modeltech_x.xe\xilinx_lib)。 Modelsim SE版在发行时是不带任何FPGA厂家的仿真库的,因此用户必须手动编译这些库。由此面临的一个问题就是怎样建立各FPGA器件的仿真库,目前各FPGA厂家都支持用户编译库,所以实现比较简单。仿真的时候,会生成一个modelsim.ini文件,里面包含了库文件的一些路径以及相关的配置。关于工程下modelsim.ini的生成,它是从modelsim安装路径下的modelsim.ini拷贝一份,并添加库文件路径得到的。所以呢,适当修改modelsim安装路径下的modelsim.ini是可以实现“一劳永逸”的。 Modelsim库编译的时候,如果存入的库文件路径为默认时,会存放在:E:\Xilinx\13.2\ISE_DS\ISE\mti_se(mti为modelsim;se为版本)、E:\Xilinx\13.2\ISE_DS\ISE\verilog\mti_se、E:\Xilinx\13.2\ISE_DS\ISE\vhdl\mti_se等多个地方,而如果是手动指定一个路径的话,好像会全部存放到一个指定的文件夹里面。 建议采用手动指定一个库文件路径,因为不同的modelsim版本的库文件,似乎是不通用的。一般的库文件路径是:D:\modeltech_10.1a\simlib_xilinx13_2 注:编译仿真库的时候,有一点要记住,每一个工程都会记住自己的库路径,当你的工作被移动(或者复制到)其他的电脑上面去里,记得修改好库文件的路径,否则会报错。 编译设置查看各个模块占用的资源对映射(Map)进行设置,可把每个模块的占用的资料逻辑出来,只需要将“detail”选项打开即可。编译过Map之后,就可以在summary中查看各个模块的Logic、DSP、RAM、LUTRAM等等内容了。 注:如果summary的Module Level Utiliztion的报告没有出来,那么可以通过手动Reset Report List解决。 深入分析在Post-Place & Route Static Timing的配置中,将对应的扩展打开,可进时序进行深入的分析! 下载固化至FPGA的启动速度Xilinx的ISE中的bit生成,里面有一项“配置速率”的配置,可以将其速率调高,这样固化之后启动就会快许多。 编译简介ISE中设计实现分为3步,分别是:Translate、MAP和Place & Route。Translate:读取综合生成EDIF和NGC格式的网表文件,生成Xilinx的NGD格式的文件。NGD文件是用逻辑元件表示的网表,包括触发器、逻辑门和RAM等逻辑元件。MAP:输入文件是Translate生成的NGD格式的网表文件,输出为NCD(Native Circuit Description)格式的文件。MAP的功能是将NGD文件中的逻辑元件映射成Xilinx FPGA中的元件,比如Logic Cell、I/O cells或者Block RAM等。Place & Route:接收MAP生成的NCD文件,将各个元件放置到FPGA中适当的位置,并通过布线器连接各个元件,完成在FPGA中的设计实现。Place & Route输出NCD文件,用于生成下载文件。 编译结束后,其中“时序”、“资源”是报告中最重要的两项。 ChipScope用于ChipScope的时候,有时查看一些管脚的时候,但管脚又找不到时,有以下方法可以解决:一般只修改成“soft”:即保持平铺地设计,但又不会破坏要查看的信号。 ChipScope是Xilinx开发的针对FPGA的在线片内信号分析工具,使用ChipScope可以通过JTAG实时在线观察FPGA的内部信号。ChipScope使用集成逻辑分析仪ILA(Intergrated Logic Analyzer)采样FPGA的内部信号,将采样值存储在FPGA多余的Block RAM中,然后通过JTAG观察采样信号。打开了ChipScope之后,还需要将工程的CDC导入到ChipScope里面去,才可以看到对应的管脚量 关于管脚的总线问题,当建立CDC时,查看的信号是属于输出管脚时,系统只能通过OBUF进行查看,且在建立之后,无法在ChipScope里面自动归类总线。只能手动建立总线。而其它的内部信号量,则可以自动建立起总线。 波形图中的T、X、O,为三根不同的游标。T为触发点的不动标(游动不了)。同时可以配置zoom进行对XO中间区域的放大。! 修改触发的条件,==等于,<>不等于。还可选取触发的条件,包括电平触发及上下沿触发等。功能强大。 对CDC调试捕捉到的波形,进行导出到Matlab进行数据处理。CDC能捕捉到的时间间隔可以调到十分短,还可以存储大量的数据,有时是无法肉眼进行观察得出结果,有时需要Matlab进行处理。 管脚分配与时钟约束Xilinx的约束一般采用ucf文件进行,称为约束文件。可以包含管脚分配(即管脚的约束)、时钟约束、面积约束等操作,有自己的一套语法。当然也可以采用PlanAhead进行界面化的约束,不过相对操作比较复杂,所以一般没有采用这种方法。但界面更加直观。 时钟报告ISE的时钟报告文件为后缀名“.twr”。map的报告后缀名:“.mrp” 嵌入式软核MicroBlazeMicroBlaze采用功能强大的32位流水线RISC结构,包含32个32位通用寄存器和一个可选的32位移位寄存器,时钟可达150MHz(一般情况下,就只能跑65MHz左右)。在Virtex-2 Pro以及更高系列的平台上,其运行速度可达120DMIP(DhrystoneMIPS),占用资源不到100个Slice。MicroBlaze是软处理器,在高端的芯片系列(Virtex系列)中,还嵌入了PowerPC硬核。 ISE的下板调试Xilinx的下载文件有两种主要的类型:后缀名为Bit的文件,该类文件可直接下载到FPGA;后缀名为MCS的文件,该类文件可下载到PROM中,后PROM中的内容会配置FPGA。Xilinx的bit文件,似乎也可以通过iMPACT下载到PROM。不过还没有尝试过。 在选择bit文件时,如果工程包含了MicroBlaze软核时,则需要在SDK_Export文件夹下的硬件平台文件夹,找到已经包含了elf(软件程序)的download.bit文件。这样固化程序,就会将MicroBlaze中的软件也固化进去了。 Tcl语言编写tcl脚本,然后先使用xtclsh,再运行命令行source xxx.tcl。(PS:xxx.tcl为你的tcl脚本文件名)或者直接 或者直接在cmd,在C:\Xilinx\14.1\ISE_DS\ISE\bin\nt\xtcl.sh(或者添加path的环境变量) 采用xfile add 添加文件时,添加.v、.ucf、.cdc、以及IP核的.xco文件。 FPGA芯片RAM芯片包含有两种RAM,一种是分布式离散的,XC6SLX100T大概有976kb(XC6SLX150T有1355kb);另一种是块RAM(18k为一块,一块18k的RAM可以由两块9k的RAM组成),大概有268块(即共4824kb) COE就如QuartusII软件中的MIF文件,在Xilinx的RAM IP核配置可进行选择是否添加COE文件,来对RAM进行初始化。 FIFO的使用,有基于Block的FIFO,也有基于distribute的FIFO,Block FIFO基于固定占用52个Slice,而distribute FIFO会根据深度及位宽占用不同数量的Slice, BUFG经常听到别人说“时钟buffer”,所以Xilinx的FPGA也使用BUF作用时钟树的分配。全局时钟缓冲器BUFG是走全局时钟网络。配置PLL时,对输出时钟使用BUFG,这样时钟会稳定一些,保证各个模块之间的时钟偏差最小。FPGA的BUFG资源是比较有限的,对于多时钟系统,有时BUFG会很紧张。 在Xilinx器件中,提供全局时钟布线资源和数字时钟管理(DCM,Digital Clock Managers)模块。DCM可以实现时钟锁定功能、频率合成功能、分频和倍频功能 SERDES片内微处理器软核MicroBlaze简介MicroBlaze软核内部采用RISC架构和哈佛结构的32位指令和数据总结,内部有32个通用寄存器R0~R3、2个特殊寄存器程序指针(PC)和处理器状态寄存器(MSR)、1个ALU单元、1个移位单元和两级中断响应单元等基本模块,还可具有3/5级流水线、桶形移位器、内存管理/内存保护单元、浮点单元(FPU)、调整缓存、异常处理和调试逻辑等可根据性能需求和逻辑区域成本任意裁剪的高级特性。MicroBlaze可以作为子模块,在FPGA工程实现嵌入式。也可单独作为顶层模块进行运行。 在ISE中,双击可为MicroBlaze生成一个顶层文件,此时MicroBlaze为允当一个子模块的功能。 MicroBlaze的总结接口MicroBlaze的总线是其优于其他同类CPU软核的重要部分,每种总线都有鲜明的特点和明确的外设。只有合理使用不同的总线来访问不同的外设,且正确地协调这些总线的工作,才能最大程序地发挥MicroBlaze的优势。CoreConnect是由IBM开发的片上总线链,它使多个芯片核相互连接成为一个完整的新芯片成为可能。Xilinx以IBM CoreConnect为嵌入式处理器的设计基础,提供了丰富的接口资源。常用总线标准有: EDK开发EDK软件主要包括XPS(Xilinx Platform Studio)和SDK(Software Develop Kit)这两个软件,前者用于构建嵌入式硬件平台,后者专门用于开发应用软件,各有侧重。通常ISE FPGA开发软件在后台运行,XPS工具调用ISE软件提供的功能。XPS主要用来嵌入式处理器硬件系统的开发(微处理器、外围设备和这些组件之间的连接问题,以及它们各自的属性设置)。软件开发在SDK中完成。硬件平台的功能验证可以通过硬件描述语言HDL仿真器完成。XPS提供了行为级、结构级以及定时精确级三种类型的仿真。验证过程结构由XPS自动产生,其中包括了仿真的HDL文件。设计者只需要输入时钟时序、重配置信息、以及一些应用代码即可。完成设计后,在XPS中将FPGA比特流和可执行文件可链接格式文件下载,就可以进行目标器件的配置。步骤: 创建硬件平台:利用XPS的板级开发包向导(BSB Wizard)快速构建设计的硬件平台,是EDK设计的第一步。 添加IP core以及用户定制外设:在XPS中添加所需的IP core, 生成仿真文件并测试硬件系统:生成硬件系统的仿真文件,可选择行为级、结构级以及时序级仿真,利用Modelsim等工具测试系统,特别是用户自定义的外设; 生成硬件比特流:生成硬件和比特流文件,这个步骤类似于传统FPGA设计的综合、布局布线、生成编程文件这3个操作; 开发软件系统:针对软件需要编写硬件代码,确定软件的操作系统、库、外设驱动等属性,针对每个软件应用工程、设置编译器、优化级别、使用的连接文件等信息。之后编译生成“.elf”帮工的可执行代码。(软件比特流) 合并软、硬件比特流,生成最终的二进制比特文件。 采用JTAG下载 在线调试:可利用XMD工具或ChipScope工具调试。 有些不懂 GPIO的位宽不对应问题 从BSB新建的LEDS,假如当时配置的位宽为4bit,但生成mhs时,对外的LEDS_IRI_O却是默认的8bit(range),此时会在生成网表处报错,应该手动将其位宽修改如上图的4bit。 下载程序时,一直失败。答:清除工程(Clean Project),然后重新编译一次,再次下载即可 关于综合操作,现在许多人都认为,Xilinx开发环境ISE的综合能力已经十分不错了,而且只有Xilinx才对自己的芯片最了解嘛,所以许多人皆采用Xilinx自带的XST综合工具进行综合操作。采用XST工具对输入设计的综合,可以根据需要进行一些针对性比较强的配置。(相关配置还没有研究)]]></content>
<categories>
<category>ASIC</category>
<category>FPGA</category>
</categories>
<tags>
<tag>xilinx</tag>
<tag>ise</tag>
</tags>
</entry>
</search>