卢玮的远古笔记



  • 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 就是 CPOSIX



  • 在裁剪好内核,和外围文件系统一起启动后,发现 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 networkservice 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: localfslocal_fs network $syslog
    # Required-Stop: $local_fs $syslog
    # Should-Start: $syslog
    # Should-Stop: networknetwork 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输出,虽然不影响使用,但最好还是可以解决

    以上缺陷等待后续处理吧!



  • 本文旨在帮助刚入手pluto的同志们搭建好pluto的工作环境,便于后续的在matlab下开发测试。

    USB驱动安装

    安装pluto的USB驱动 PlutoSDR-M2k-USB-Drivers.exe ,需要的资源在 github页 可以下载。安装过程极其简单,一路默认next就可以了。

    安装完成后,可以在设备管理器看到如下图的设备(当然需要连接上pluto),就说明安装成功了。

    0_1614594391248_image-20201108132710358.png

    0_1614594416476_image-20201108132742781.png

    同时,我们会看到如下的PlutoSDR存储盘:

    0_1614594444931_image-20201108132822198.png

    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

    0_1614594489061_image-20201108134436530.png

    • 选择安装的编译器类型,这里选择第二项

    0_1614594499909_image-20201108134532959.png

    • 选择安装路径,注意**不要用中文,也不要有空格!**默认的路径其实已经可以了,如果需要更改尽量只更改安装盘,不更改文件夹命名

    0_1614594514138_image-20201108134753307.png

    • 后面一路默认安装即可,可能安装的时间会比较长,耐心等待

    环境变量配置

    • 打开 此电脑->属性->高级系统设置->环境变量

    0_1614594569042_image-20201108135210921.png

    • 新建环境变量,如下配置。注意变量值为TDM-GCC编译器安装文件夹,一定要一致!

    0_1614594588912_image-20201108135344804.png

    MATLAB配置

    • 设置环境变量,输入以下命令

      #第一个参数是我们的环境变量名,第二个参数是我们的安装路径
      setenv('MW_MINGW64_LOC','C:\TDM-GCC-64');
      mex -setup
      
    • 在弹出的选项中选择C++语言,点击即可

    0_1614594623854_image-20201108140041595.png

    安装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,就可以使用这些设置的别名。面对那些复杂的压缩解压命令等等,碰到一个就加入进来吧!



  • 全是干货呀👍 码住了


登录后回复
 

Copyright © 2018 bbs.dian.org.cn All rights reserved.

与 Dian 的连接断开,我们正在尝试重连,请耐心等待