BeagleBone Black开发——环境变量和开机自动加载的控制

  • 对环境变量的控制
  • 系统开机自启动服务项的设置

对环境变量的控制

    在BeagleBone Black中,需要经常查看slots和pins的状态,但是如果每次都输入cat /sys/devices/bone_capemgr.8/slotscat /sys/kernel/debug/pinctrl/44e10800.pinmux/pins的话又会显得很繁琐,这个时候就可以让环境变量帮助我们简化输入。通过对/etc/profile文件的修改就可以配置环境变量了。

    使用vim对profile文件进行编辑。在umask 022前插入如下内容:

export SLOTS=/sys/devices/bone_capemgr.8/slots
export PINS=/sys/kernel/debug/pinctrl/44e10800.pinmux/pins

    完成后保存退出,使用source /etc/profile更新环境变量后就可以使用了。这样当我们想查看slots和pins状态时就可以使用cat $SLOTScat $PINS进行了,方便了许多。特别的,如果我们想查看特定的引脚功能配置,还可以使用cat $PINS | grep 984来进行。(在《BBB引脚功能速查表》中第三列找到P9.24的地址是0x984)。

系统开机自启动服务项的设置

    在系统开机时,我们一般想让它预先加载我们需要使用的模块,这时配置系统加载启动服务就很重要了,在Angstrom系统下,USB连接好BBB以后在电脑里会出现一个盘符,里面有一个叫做uEnv.txt的文件。通过它可以设置系统启动时加载或禁止加载的dtbo。比如我想禁用HDMI并且想要启用BBB-UART2的话,就可以在uENv.txt后面加入如下一行:(注意:这里有的博客写的是要写成一行,比如:教程:如何为BBB制作cape(或:如何在系统启动时自动加载dtbo)。但是,有的教程表示要写成两行才有效,比如:【Beagle Bone开源设计】四轴飞行器(7)-串口获得传感器数据。在我的板子上我测试了一下,写成两行仅仅能加载UART2,并不能禁用HDMI。要写成一行才有效。应该是不同版本的系统不一样吧,请大家灵活变通。)

optargs=quiet capemgr.disable_partno=BB-BONELT-HDMI,BB-BONELT-HDMIN capemgr.enable_partno=BB-UART2

    然后保存,安全弹出盘符,再将系统重启通过cat $SLOTS命令就可以发现系统没有加载HDMI服务,同时加载了UART2服务。这个时候可能会发现系统有如下输出:

 0: 54:PF--- 
 1: 55:PF--- 
 2: 56:PF--- 
 3: 57:PF--- 
 4: ff:P-O-L Bone-LT-eMMC-2G,00A0,Texas Instrument,BB-BONE-EMMC-2G
 5: ff:P-O-- Bone-Black-HDMI,00A0,Texas Instrument,BB-BONELT-HDMI
 6: ff:P-O-- Bone-Black-HDMIN,00A0,Texas Instrument,BB-BONELT-HDMIN
 7: ff:P-O-L Override Board Name,00A0,Override Manuf,BB-UART2

    虽然其中仍然显示了HDMI项,但是可以发现其前方描述是ff:P-O--而不是ff:P-O-L,这里最后的”L“代表这个cape已经被load,即已经启用。没有这个“L”的cape基本等于不存在。因此表示HDMI没有被加载。据教程:如何为BBB制作cape(或:如何在系统启动时自动加载dtbo)所述,此种方式仅仅适用于系统自带的dtbo文件,如果你自己编译了一个dtbo文件,即便放进 /lib/firmware 目录下也不能自动加载(/lib/firmware里原本就有的可以加载是因为它们已经被编译进内核了)。所以除非你自己编译一遍系统,否则不能用这个办法在启动时自动加载自己的cape。用uEnv.txt跟用eeprom差不多,所以也不行。这篇文章里介绍了一个终极方法:使用systemd,大家可以自行参阅一下。

你可能感兴趣的:(beaglebone)