Skip to content

Instantly share code, notes, and snippets.

@pdp7
Last active September 24, 2023 21:49
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pdp7/d4770a6ba17e666848796bf5cfd0caee to your computer and use it in GitHub Desktop.
Save pdp7/d4770a6ba17e666848796bf5cfd0caee to your computer and use it in GitHub Desktop.
config-pin beaglebone start up

Create file /usr/bin/enable-i2c-pins.sh

  • sudo vi /usr/bin/enable-i2c-pins.sh
#!/bin/bash

config-pin p9.17 i2c
config-pin p9.18 i2c
  • sudo chmod 755 /usr/bin/enable-i2c-pins.sh

Create file /lib/systemd/system/enable-i2c-pins.service

  • sudo vi /lib/systemd/system/enable-i2c-pins.service
[Unit]
Description=Enable I2C pins
After=generic-board-startup.service

[Service]
Type=simple
ExecStart=/usr/bin/enable-i2c-pins.sh

[Install]
WantedBy=multi-user.target

Enable the new systemd service

  • sudo systemctl daemon-reload
  • sudo systemctl enable enable-i2c-pins.service
Created symlink /etc/systemd/system/multi-user.target.wants/enable-i2c-pins.service → /lib/systemd/system/enable-i2c-pins.service.

Reboot and test

  • sudo systemctl status enable-i2c-pins.service
debian@beaglebone:~$ sudo systemctl status enable-i2c-pins.service
● enable-i2c-pins.service - Enable I2C pins
   Loaded: loaded (/lib/systemd/system/enable-i2c-pins.service; enabled)
   Active: inactive (dead) since Wed 2017-04-19 06:35:06 UTC; 48s ago
  Process: 649 ExecStart=/usr/bin/enable-i2c-pins.sh (code=exited, status=0/SUCCESS)
 Main PID: 649 (code=exited, status=0/SUCCESS)

Apr 19 06:35:05 beaglebone sudo[664]: root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/bin/bash -c echo i2c > /sys/devices/platform/ocp/ocp:P9_17_pinmux/state
Apr 19 06:35:05 beaglebone sudo[664]: pam_unix(sudo:session): session opened for user root by (uid=0)
Apr 19 06:35:05 beaglebone sudo[664]: pam_unix(sudo:session): session closed for user root
Apr 19 06:35:06 beaglebone sudo[677]: root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/bin/bash -c echo i2c > /sys/devices/platform/ocp/ocp:P9_18_pinmux/state
Apr 19 06:35:06 beaglebone sudo[677]: pam_unix(sudo:session): session opened for user root by (uid=0)
Apr 19 06:35:06 beaglebone sudo[677]: pam_unix(sudo:session): session closed for user root
  • config-pin -q p9.17 && config-pin -q p9.18
debian@beaglebone:~$ config-pin -q p9.17 && config-pin -q p9.18
P9_17 Mode: i2c
P9_18 Mode: i2c
@pdp7
Copy link
Author

pdp7 commented Apr 19, 2017

@mvduin
cdsteinkuehler/beaglebone-universal-io#41 (comment)
To reduce boot time, systemd (the init system used on beaglebone debian images) starts services in parallel as much as allowed by the ordering constraints specified by those services.

To ensure you can use config-pin you need to add a constraint ordering your service after the one which loads cape-universal, which is generic-board-startup.service.

A minimal service file for doing one-time setup would be something like

[Unit]
Description=insert description here

After=generic-board-startup.service

[Install]
WantedBy=multi-user.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/path/to/executable and arguments

@pdp7
Copy link
Author

pdp7 commented Apr 19, 2017

/usr/bin/enable-i2c-pins.sh

#!/bin/bash

config-pin p9.17 i2c
config-pin p9.18 i2c
debian@beaglebone:/lib/systemd$ sudo chmod 755 /usr/bin/enable-i2c-pins.sh

/lib/systemd/system/enable-i2c-pins.service

[Unit]
Description=Enable I2C pins
After=generic-board-startup.service

[Service]
Type=simple
ExecStart=/usr/bin/enable-i2c-pins.sh

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable enable-i2c-pins.service
Created symlink /etc/systemd/system/multi-user.target.wants/enable-i2c-pins.service → /lib/systemd/system/enable-i2c-pins.service.
debian@beaglebone:/lib/systemd$ config-pin -q p9.17 && config-pin -q p9.18
P9_17 Mode: i2c
P9_18 Mode: i2c
debian@beaglebone:~$ sudo systemctl status enable-i2c-pins.service
● enable-i2c-pins.service - Enable I2C pins
   Loaded: loaded (/lib/systemd/system/enable-i2c-pins.service; enabled)
   Active: inactive (dead) since Wed 2017-04-19 06:35:06 UTC; 48s ago
  Process: 649 ExecStart=/usr/bin/enable-i2c-pins.sh (code=exited, status=0/SUCCESS)
 Main PID: 649 (code=exited, status=0/SUCCESS)

Apr 19 06:35:05 beaglebone sudo[664]: root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/bin/bash -c echo i2c > /sys/devices/platform/ocp/ocp:P9_17_pinmux/state
Apr 19 06:35:05 beaglebone sudo[664]: pam_unix(sudo:session): session opened for user root by (uid=0)
Apr 19 06:35:05 beaglebone sudo[664]: pam_unix(sudo:session): session closed for user root
Apr 19 06:35:06 beaglebone sudo[677]: root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/bin/bash -c echo i2c > /sys/devices/platform/ocp/ocp:P9_18_pinmux/state
Apr 19 06:35:06 beaglebone sudo[677]: pam_unix(sudo:session): session opened for user root by (uid=0)
Apr 19 06:35:06 beaglebone sudo[677]: pam_unix(sudo:session): session closed for user root
debian@beaglebone:~$ config-pin -q p9.17 && config-pin -q p9.18
P9_17 Mode: i2c
P9_18 Mode: i2c

@pdp7
Copy link
Author

pdp7 commented Apr 19, 2017

debian@beaglebone:~/adafruit-beaglebone-io-python$ vi /usr/bin/enable-i2c-pins.sh
debian@beaglebone:~/adafruit-beaglebone-io-python$ vi /usr/bin/enable-i2c-pins.sh
debian@beaglebone:~/adafruit-beaglebone-io-python$ sudo vi /usr/bin/enable-i2c-pins.sh
debian@beaglebone:~/adafruit-beaglebone-io-python$ sudo chmod 755 /usr/bin/enable-i2c-pins.sh
debian@beaglebone:~/adafruit-beaglebone-io-python$ /usr/bin/enable-i2c-pins.sh
debian@beaglebone:~/adafruit-beaglebone-io-python$ sudo vi /lib/systemd/system/enable-i2c-pins.service
debian@beaglebone:~/adafruit-beaglebone-io-python$ sudo systemctl daemon-reload
debian@beaglebone:~/adafruit-beaglebone-io-python$ sudo systemctl daemon-reload^C
debian@beaglebone:~/adafruit-beaglebone-io-python$ sudo systemctl enable enable-i2c-pins.service
Created symlink from /etc/systemd/system/multi-user.target.wants/enable-i2c-pins.service to /lib/systemd/system/enable-i2c-pins.service.
sudo vi /usr/bin/enable-i2c-pins.sh
sudo chmod 755 /usr/bin/enable-i2c-pins.sh
sudo vi /lib/systemd/system/enable-i2c-pins.service
sudo systemctl daemon-reload
sudo systemctl enable enable-i2c-pins.service
sudo systemctl start enable-i2c-pins.service
config-pin -q p9.17 && config-pin -q p9.18


Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment