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

手动修改树莓派配置(仅适用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/[email protected]  /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版本的))