卢玮的远古笔记
-
Linux小系统登陆时出现多条如下warning:
-bash:warning:setlocale:LC_CTYPE:connot change locale (en_US.UTF-8):No such file or directory
解决方案
# 打开小系统里的i18n vi /etc/sysconfig/i18n # 添加下面的 LC_ALL=C export LC_ALL
重新打包后问题解决。
LC_ALL = C
之前的报错说明我们本身的小系统里没有安装en_US的local,使用
LC_ALL = C
是为了去除所有本地化的设置,让命令能正确执行。在Linux中通过
locale
来设置程序运行的不同语言环境,locale
由ANSI C提供支持。locale
的命名规则为<语言>_<地区>.<字符集编码>
,如zh_CN.UTF-8
,zh代表中文,CN代表大陆地区,UTF-8表示字符集。在locale
环境中,有一组变量,代表国际化环境中的不同设置:-
LC_COLLATE
定义该环境的排序和比较规则 -
LC_CTYPE
用于字符分类和字符串处理,控制所有字符的处理方式,包括字符编码,字符是单字节还是多字节,如何打印等。是最重要的一个环境变量。 -
LC_MONETARY
货币格式 -
LC_NUMERIC
非货币的数字显示格式 -
LC_TIME
时间和日期格式 -
LC_MESSAGES
提示信息的语言。另外还有一个LANGUAGE
参数,它与LC_MESSAGES
相似,但如果该参数一旦设置,则LC_MESSAGES
参数就会失效。LANGUAGE
参数可同时设置多种语言信息,如LANGUANE="zh_CN.GB18030:zh_CN.GB2312:zh_CN"
。 -
LANG
LC_*
的默认值,是最低级别的设置,如果LC_*
没有设置,则使用该值。类似于LC_ALL
。 -
LC_ALL
它是一个宏,如果该值设置了,则该值会覆盖所有LC_*
的设置值。注意,LANG
的值不受该宏影响。
"C"是系统默认的
locale
,"POSIX"是"C"的别名。所以当我们新安装完一个系统时,默认的locale
就是C
或POSIX
。
-
-
在裁剪好内核,和外围文件系统一起启动后,发现
service
命令以及网络配置都无法实现,进行调试。service
命令使用后无任何输出查看
/sbin/service
,其调用/etc/init.d/functions
。为了定位问题所在,查看functions
,发现它所有的错误输出都送到了/dev/null
(黑洞),没有显示出来。将所有的2>/dev/null
删去,查看到了错误信息,缺少/etc/profile.d/lang.sh
。为了避免再出现相同位置的文件缺失,直接将/etc/profile.d
拷入到小系统中,service能够正常的运行了。service network
命令无法正常运行在
service
能够运行后,使用service network
、service network start
等命令是无法正常运行的,会报错缺少某些命令或文件。按照报错信息将缺少的命令和文件补全。以下是我拷贝的一些:env sort /bin/ipcalc grep /var/run/netreport egrep /sbin/arping pidof
service ssh
命令无法正常运行完成上述两个步骤后,已经可以利用
service network
命令配置好小系统的网络了,从主机ping可以ping通相应的IP。但是直接用ssh还无法链接,同样进行调试,查看报错进行拷贝。以下是我拷贝的一些:/usr/bin/dirname
拷贝完成后,现在运行
service ssh restart
只会提示:Stopping sshd: [FAILED]
由于没有更多的报错信息,难以进行调试,查看
/etc/init.d/sshd
脚本内容:vi /etc/init.d/sshd
在脚本开头可以看到一些说明信息:
#!/bin/bash # # sshd Start up the OpenSSH server daemon # # chkconfig: 2345 55 25 # description: SSH is a protocol for secure remote shell access. \ # This service starts up the OpenSSH server daemon. # # processname: sshd # config: /etc/ssh/ssh_host_key # config: /etc/ssh/ssh_host_key.pub # config: /etc/ssh/ssh_random_seed # config: /etc/ssh/sshd_config # pidfile: /var/run/sshd.pid ### BEGIN INIT INFO # Provides: sshd # Required-Start:
network $syslog # Required-Stop: $local_fs $syslog # Should-Start: $syslog # Should-Stop: syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start up the OpenSSH server daemon # Description: SSH is a protocol for secure remote shell access. # This service starts up the OpenSSH server daemon. ### END INIT INFO 可以看到相关的配置文件在
/etc/ssh
文件夹下,拷贝至小系统后再次尝试,可以看到新的有用报错信息了,继续拷贝。以下是我拷贝的一些命令:usleep sleep
ssh无法连接
完成上面的操作后,ssh连接会提示输入密码,输入密码后会卡住在如下命令:
PTY allocation request failed on channel 0
但是在ssh连接命令上加上
-T
就可以顺利进行连接。查阅说明:
-T Disable pseudo-tty allocation.
-T
意思是禁止分配伪终端。当用ssh或telnet等登录系统时,系统分配给我们的终端就是伪终端。 如果ssh使用此选项登录系统时,由于禁用,将无法获得终端;但仍能够获得shell,只不过看起来像在本地,也没有很多应有的环境变量,例如命令提示符,PS1等。于是猜测仍然是与ssh相关的依赖没有拷完。使用如下命令查看ssh依赖:
[root@localhost ~]# rpm -ql openssh /etc/ssh /etc/ssh/moduli /usr/bin/ssh-keygen /usr/libexec/openssh /usr/libexec/openssh/ssh-keysign /usr/share/doc/openssh-5.3p1 /usr/share/doc/openssh-5.3p1/CREDITS /usr/share/doc/openssh-5.3p1/ChangeLog /usr/share/doc/openssh-5.3p1/INSTALL /usr/share/doc/openssh-5.3p1/LICENCE /usr/share/doc/openssh-5.3p1/OVERVIEW /usr/share/doc/openssh-5.3p1/PROTOCOL /usr/share/doc/openssh-5.3p1/PROTOCOL.agent /usr/share/doc/openssh-5.3p1/PROTOCOL.certkeys /usr/share/doc/openssh-5.3p1/README /usr/share/doc/openssh-5.3p1/README.dns /usr/share/doc/openssh-5.3p1/README.nss /usr/share/doc/openssh-5.3p1/README.platform /usr/share/doc/openssh-5.3p1/README.privsep /usr/share/doc/openssh-5.3p1/README.smartcard /usr/share/doc/openssh-5.3p1/README.tun /usr/share/doc/openssh-5.3p1/TODO /usr/share/doc/openssh-5.3p1/WARNING.RNG /usr/share/man/man1/ssh-keygen.1.gz /usr/share/man/man8/ssh-keysign.8.gz
去除相关的文档和
man
,剩下没有的我们就补上。补全后问题仍然没有解决。在小系统中输入
mount
,可以看到已经挂载的磁盘:/dev/sda1 on / type ext4 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) tmpfs on /dev/shm type tmpfs (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
奇怪的事情来了,明明已经挂载了
/dev/pts
,但是在/dev
下却并没有出现pts
文件夹,推测这就是问题的根源所在!尝试在打包前直接新建
/dev/pts
目录,但是并没有用。。。。。。最后在测试小系统mkdir
命令时意外发现居然失效了?!重新拷贝一次mkdir
命令,问题最终解决!最后删去打包前新建的
/dev/pts
目录,裁剪驱动后重新打包,可以正常运行。看来就是mkdir
命令失效带来的问题了。。。。。。挺好奇为啥会失效的,可惜目前没办法复现。至此,已经可以实现ssh直接连接小系统了。但目前的系统缺陷如下:
- 开机不能自动配置好network和sshd,需要手动使用
service
命令实现 - 登录过程中和登陆后存在一些warning输出,虽然不影响使用,但最好还是可以解决
以上缺陷等待后续处理吧!
- 开机不能自动配置好network和sshd,需要手动使用
-
本文旨在帮助刚入手pluto的同志们搭建好pluto的工作环境,便于后续的在matlab下开发测试。
USB驱动安装
安装pluto的USB驱动
PlutoSDR-M2k-USB-Drivers.exe
,需要的资源在 github页 可以下载。安装过程极其简单,一路默认next就可以了。安装完成后,可以在设备管理器看到如下图的设备(当然需要连接上pluto),就说明安装成功了。
同时,我们会看到如下的PlutoSDR存储盘:
OSC上位机安装
安装Pluto官方的上位机管理软件
adi-osc-setup.exe
,需要的资源在 官方网站 可以下载。安装过程也没啥好说的,选择合适的路径一路默认即可。libiio驱动安装
安装所需的libiio驱动
libiio-0.21.g565bf68-Windows-setup.exe
,需要的资源在 github页 可以下载。一路默认完事儿了。MATLAB安装
这就不用我说了吧,安装要求的版本,我们这次是
R2018b
,相关安装的教程资料网上一大堆,不过多赘述。TDM-GCC编译器安装
安装所需的编译器
tdm64-gcc-9.2.0.exe
,需要的资源在 官方网站 可以下载。编译器的安装
- 点击
Create
- 选择安装的编译器类型,这里选择第二项
- 选择安装路径,注意**不要用中文,也不要有空格!**默认的路径其实已经可以了,如果需要更改尽量只更改安装盘,不更改文件夹命名
- 后面一路默认安装即可,可能安装的时间会比较长,耐心等待
环境变量配置
- 打开
此电脑->属性->高级系统设置->环境变量
- 新建环境变量,如下配置。注意变量值为TDM-GCC编译器安装文件夹,一定要一致!
MATLAB配置
-
设置环境变量,输入以下命令
#第一个参数是我们的环境变量名,第二个参数是我们的安装路径 setenv('MW_MINGW64_LOC','C:\TDM-GCC-64'); mex -setup
-
在弹出的选项中选择C++语言,点击即可
安装Matlab依赖包
记住要安装Matlab的官方依赖包,我们这次是ADI官方提供的依赖包,官网应该也有提供的下载,这里就不在列出
配置完成
至此,整个环境配置完成,愉快的去造作吧!
- 点击
-
入手港版Sony后有一些我用不到的软件,又不想root,利用adb卸载。
下载adb工具包
这玩意儿网上百度一大堆,下一个就好了。应该是个压缩包,解压到你知道的地方即可
手机准备
首先,手机要打开
开发者选项
,通常应该是点击版本号5下即可,具体的请自行百度随后,进入
开发者选下
,打开USB调试
请下载一个包名查看软件,后面删除包需要用这类软件来查看包名
删除流程
-
手机连接电脑
-
在解压adb的文件夹打开
cmd
-
输入如下命令
adb devices
能够看到自己的设备,说明连接成功。若未看到,请检查手机准备步骤是否完成
-
连接设备
adb shell
-
删除命令如下
pm uninstall -k --user 0 应用包名
这个包名不是应用的名字,具体的格式可以用如下命令查看
pm list packages
所以具体要删除啥,就用下载的包名查看软件看即可
我删除的软件
# Call of Duty com.activision.callofduty.shooter # LinkedIN com.linkedin.android # TIDAL 3 Months Free com.android.tidal.campaigninstaller # Netflix com.netflix.mediaclient # Google地图 com.google.android.apps.maps # 数字健康 com.google.android.apps.wellbeing # 智能镜头 com.google.ar.lens # Google Play Service for AR com.google.ar.core # Google com.google.android.googlequicksearchbox # Chrome com.android.chrome # 相册 com.google.android.apps.photos # 文件 com.google.android.documentsui
-
-
众所周知,Linux下的解压命令多又难记,时不时还有用错的情况。在邓迅邓巨神的指点下,知晓了
alias
这个神奇的命令,使用起来确实方便了许多,遂记下!查看当前已设置的别名
alex@PC-20200316LEME:~
$ alias alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert $//'\'')"' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l='ls -CF' alias la='ls -A' alias lh='ls -lh' alias ll='ls -alF' alias ls='ls --color=auto' alias tarbz2='tar -jxvf' 直接输入
alias
即可查看已经设置的别名,已经设置好的别名我们可以直接使用。例如,我输入命令ll
,就相当于输入ls -alF
。为命令设置别名
alex@PC-20200316LEME:~$ alias vi='vim' alex@PC-20200316LEME:~
$ alias alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert $//'\'')"' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l='ls -CF' alias la='ls -A' alias lh='ls -lh' alias ll='ls -alF' alias ls='ls --color=auto' alias tarbz2='tar -jxvf' alias vi='vim' 这个例子我们给
vim
设置了一个别名vi
,注意设置时等号左右不要有空格。此时我们输入vi
命令就相当于输入vim
命令。删除设置的别名
alex@PC-20200316LEME:~$ unalias vi alex@PC-20200316LEME:~
$ alias alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l='ls -CF' alias la='ls -A' alias lh='ls -lh' alias ll='ls -alF' alias ls='ls --color=auto' alias tarbz2='tar -jxvf' 使用
unalias
就可以删除我们已经设置好的别名。让别名永久生效(当然,别删除它)
按照上面的方法生成的别名,在我们重启电脑后就会失效。怎么样才能让他一直生效呢?当然是把它加入到会自动运行的脚本中!
~/.bashrc
就是一个不错的选择。打开
~/.bashrc
:vim ~/.bashrc
可以看到一些已经写入在这个脚本中的
alias
命令:··· # some more ls aliases alias ll='ls -alF' alias la='ls -A' alias lh='ls -lh' alias l='ls -CF' #下面这行是我自己加入的alia命令,用来解压.tar.bz2的压缩包 alias tarbz2='tar -jxvf' ···
现在在这个脚本中加入自己想用的别名吧!之后每次只要你是用这个账户登录的Linux,就可以使用这些设置的别名。面对那些复杂的压缩解压命令等等,碰到一个就加入进来吧!
-
全是干货呀 码住了