美文网首页
手动修改树莓派配置(仅适用systemd版本的)

手动修改树莓派配置(仅适用systemd版本的)

作者: 绿箭ML | 来源:发表于2020-08-15 20:22 被阅读0次

    手动修改树莓派配置(仅适用systemd)

    我为什么这样做?

    针对下载最新版的raspbian buster镜像,遇上问题如下:

    • ssh服务默认没有开启,无法通过网络远程登录。
    • hdmi没有输出。
    • 串口接收端损坏,发送端好的,无法接受串口发送的调试命令,但是可以读取log。

    以上理由....都特喵扯淡,反正:

    我就只是想改一下,就这。

    具体步骤

    1.在fat32分区中,内核启动命令行参数记录在cmdline.txt中,此处修改指定systemd作为init,并且取消quiet参数,让开机log正常打印,可以用串口读取到,这个可以直接读取tf卡盘修改。

    最终的cmdline.txt内容如下:

    root=PARTUUID=ea7d04d6-02 rootfstype=ext4 init=/bin/systemd elevator=deadline fsck.repair=yes rootwait  plymouth.ignore-serial-consoles
    

    2.挂载tf卡树莓派的根分区,此处内存卡块设备为/dev/sdc,则/dev/sdc1为fat32分区,/dev/sdc2为树莓派的ext4根分区

    切换root用户(#),挂载点创建到/media/pi

    #mkdir /media/pi
    

    挂载文件系统

    文件系统挂载点/media/pi不是一定要这个路径,根据实际情况,如果挂载点有变,下面命令涉及/media/pi路径替换一下即可

    #mount -t ext4 -o rw /dev/sdc2 /media/pi
    

    3.确认ssh服务配置文件存在系统中。

    ls查看ssh.service配置文件所在的目录。

    #ls /media/pi/lib/systemd/system/ssh*
    
    /media/pi/lib/systemd/system/ssh.service  /media/pi/lib/systemd/system/ssh@.service  /media/pi/lib/systemd/system/ssh.socket  /media/pi/lib/systemd/system/sshswitch.service
    

    看以上输出结果,存在/media/pi/lib/systemd/system/ssh.service,确认系统已经安装了ssh服务。

    4.systemd的target依赖关系

    查阅systemd手册可知,启动的目标依赖关系大致如下

    sysinit.target -> basic.target -> multi-user.target -> graphical.target
    

    需要把ssh.service添加到启动流程中去。

    5.添加ssh软链接到到wants文件夹

    上步所示,graphical.target启动前先启动multi-user.target,ssh依赖是multi-user.target。软连接添加到multi-user.target.wants文件夹里,即可添加到启动流程中去。

    #ln -s /lib/systemd/system/ssh.service /media/pi/etc/systemd/system/multi-user.target.wants/ssh.service
    

    查看文件详细信息,确认软连接成功添加

     #ls -l /media/pi/etc/systemd/system/multi-user.target.wants/ssh.service 
    
    lrwxrwxrwx 1 root root 31 8月  15 12:07 /media/pi/etc/systemd/system/multi-user.target.wants/ssh.service -> /lib/systemd/system/ssh.service
    

    如上所示,软连接创建成功,/media/pi/etc/systemd/system/multi-user.target.wants/ssh.service 指向 /lib/systemd/system/ssh.service

    6.ssh服务添加开机自启成功,连上网线,插入tf卡,开机,找到树莓派的ip尝试链接即可。

    网络服务默认是使用networking.service来管理,默认添加到multi-user.target.wants里去,参与开机自启。

    关闭了cmdline.txtquiet的参数,开机时会打印详细流程,可以通过读取串口输出来确定系统启动的情况,可以通过串口大致判断是否开机成功。(虽然pi的rxd可能因为接触不良或者坏了导致树莓派无法接收上位机的信息,如果整个串口坏掉了那就没办法了,摸着来吧)

    重启后,观察硬盘读写灯(绿灯),启动时偶尔闪烁。


    自动链接wifi篇

    手上的树莓派2B无板载wifi,需要额外购买usb wifi模块,同时要网卡型号在树莓派中存在驱动,一般某宝备注免驱,详情需要询问。

    挂载root分区到/media/pi后,修改/media/pi/etc/wpa_supplicant/wpa_supplicant.conf

    #vim /media/pi/etc/wpa_supplicant/wpa_supplicant.conf
    

    添加network结构,ssid是自己开的wifi名称,psk是wifi密码,priority是连接的优先级,越大优先级越高

    ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
    update_config=1
    
    network={
        ssid="mywifi"
        psk="12345678"
        priority=5
    }
    

    如果对vi使用不熟悉,可以参考这里

    一份简单的快捷键帮助:
    
    移动光标:
    alt+h 左移动  alt+l 右移动
    alt+j 下移动  alt+k 上移动
    alt+xxx的快捷键都会退出编辑模式,重新按i进入即可,下同。
    
    删除字符:
    alt+x
    
    删除当前行:
    alt+d d(第二次d松开alt)
    
    插入编辑模式:
    i
    
    保存退出
    alt+: wq(松开alt+:)
    
    取消保存并退出
    alt+: q!(松开alt+:)
    
    

    因为看不到log,很难判断连接失败的原因,所以直接配置wifi连接但又不成功排查起来很困难,建议先用有线连接。

    由于wifi使用了dhcp自动分配ip,树莓派的ip可能无法确定(除非有些机型显示已连接的设备的ip,或者扫描),或使用其他手段扫描wifi网段的ip。

    以下bash脚本,扫描当前无线局域网内存活的主机,小米手机的wifi网段为192.168.43.x,每个ip发送一个ping包,不丢包则认为主机存活。

    i=1
    net="192.168.42"
    while [ $i -lt 254 ];
    do
        echo -en "\r$net.$((++i))      "
        ping -c 1 $net.$i > /dev/null && echo "->主机在线"
    done
    

    确定wifi网段的方法

    手机终端模拟器键入ifconfig命令,看到wlan网卡的ip,我的是192.168.43.1

    最终扫描到的ip是192.168.43.227,使用juicessh登录树莓派即可.

    wifi管理的服务由wpa_supplicant.service管理,经查看,默认已经添加到/media/pi/etc/systemd/system/multi-user.target.wants,说明服务自启是包含了wifi管理的。

    手机开同名同密码的ap尝试被连接,注意是2.4G 频段,此处购买的usb wifi模块不支持5G频段。


    知识储备

    1.raspbian是基于debian的树莓派定制系统,系统管理上可以套用debian的方法。

    2.debian10,版本代号buster,使用的init不是传统sysV init,而使用了systemd。

    3.树莓派的tf卡有2个分区,一个fat32格式的boot分区,放置bios启动相关的配置(config.txt),以及内核启动参数(cmdline.txt),一个ext4格式的根分区。

    4.systemd和传统的sysV init开机启动的配置有很大的差异。sysV init会读取init.d相关daemon启动脚本,但是systemd则用了它自己要求的配置文件,systemd兼容了大部分sysV的脚本。具体差异如下

    • systemd服务的配置文件位与/lib/systemd/system,/etc/systemd/system等几处位置
    • sysV init的服务启动脚本位与/etc/init.d /etc/rcX.d (X=0-6)

    5.运行级别。

    linux分成6个运行级别随便在博客找的说明

    编号 描述 systemd对应的target
    0 关机模式,系统默认运行级别不能设置为0,否则不能正常启动,一开机就自动关机 shutdown.target
    1 单用户模式,root权限,用于系统维护,禁止远程登录,就像Windows下的安全模式 emergency.target
    2 多用户模式,没有 NFS 网络支持 rescure.target
    3 完整的多用户文本模式,有 NFS,登录后进入控制台命令模式 multi-user.target
    4 系统未使用,保留一般不用
    5 图形化模式,登陆后进入图形 GUI 模式 graphical.target
    6 重启模式,默认运行级别不能设为6,否则不能设为6,否则不能正常启动,就会一直开机重启
    • systemd通过软链接的方法,把选中运行级别的.target配置文件软链接到/etc/systemd/system/default.target
    • sysV init 则把启动脚本放在/etc/init.d,不同运行级别需要启动的服务,则软链接到/etc/rcX.d(例如rc3.d)

    相关文章

      网友评论

          本文标题:手动修改树莓派配置(仅适用systemd版本的)

          本文链接:https://www.haomeiwen.com/subject/txxzdktx.html