使用的是rc.local上添加脚本方法。Ubuntu开机之后会执行/etc/rc.local文件中的脚本,
所以我们可以直接在/etc/rc.local中添加启动脚本。
给出使用中碰到的问题及解决方法:
https://blog.csdn.net/benbenxiongyuan/article/details/58597036
1、编辑/etc/rc.local,因为其为只读文件,需使其可写
cd /etc
chmod a+w rc.local
这时你就可以编辑rc.local了,双击进入
红框内容为添加测试内容,脚本在exit 0之前的内容
2、解决添加测试内容后,开机不自启方法
如上添加了打印两句话的指令,但是重启开机后,并没有执行
发现是由于shell的问题造成的。有些命令需要在bash shell中运行,而不能在dash中运行。
从Ubuntu 6.10开始,默认使用dash(theDebian Almquist Shell)而不是bash(the GNUBourne-Again Shell). 但Login Shell还是bash。
1、将/etc/rc.local的命令改成更加兼容的模式,将"#!/bin/sh"改为"#!/bin/bash"
2、将/bin/sh重新链接到/bin/bash,方法如下:
方法一:终端执行 sudo dpkg-reconfigure dash,然后选择 no.
方法二:重新进行软链接,执行以下命令:
sudo rm /bin/sh
sudo ln -s /bin/bash /bin/sh
这样就将/bin/sh链接到了/bin/bash。reboot系统后,命令正常执行
我使用的是第一个方法连接的,实测可用。
此时,开机自启后,可以看到相应目录下的test.txt里被写入了指定内容。
为了是在命令行中执行insmod命令安装的驱动能在重启之后还有的解决方法大致有一下两种方法:
(1)直接编译内核,把想安装的驱动在编译内核的时候给编译进去,这种方法比较麻烦,花的时候也比较的多,一般不采用这种方法(这种方法网上有很多资料可以参考)。
(2)这种方法比较简单:就是在启动脚本中加载模块,这样每次开机启动都自动加载相应的驱动模块。具体的方式如下:
在文件/etc/rc.local中加载你想要的模块程序即可
在Linux上使用开源can驱动时,每次按照步骤安装了can驱动,但是开机重启后,驱动在内核就不存在了,需要重新安装。开发的是无人驾驶监控上位机,实车测试时,不可能每次都安装一遍驱动再运行软件,所以需要编写一个开机自启脚本,将can驱动在每次开机时insmod。
脚本如下:
#!/bin/bash
gnome-terminal
su
123
cd /home/admin123/文档/zpcican
modprobe sja1000
insmod ./zpcican.ko
ifconfig can0
别忘了给脚本权限:
chmod +x ./test1.sh
修改rc.local的属性,设置为可执行。在ubuntu 16.04中,默认状态下rc.local是不能执行的。所以,也必须像第二步一样,+x一下
不使用脚本,可以直接使用指令:https://blog.csdn.net/jiangganwu/article/details/82980105
即在rc.local的脚本处直接输入指令,而不是脚本的地址
1. 加载驱动模块: zpcican.ko
2. zpcican.ko存放路径:/home/admin123/文档/zpcican/zpcican.ko
3. 打开文件/etc/rc.local,添加加载命令 :
gnome-terminal //打开终端的意思
su
123
cd /home/admin123/文档/zpcican
modprobe sja1000
insmod ./zpcican.ko
ifconfig can0
是不是和脚本一样,哈哈,其实是我懒得写脚本啦!
gnome-terminal 如果不加这个,需要先打开终端,再开软件,不然还是无法识别设备。
开机自启动用QT编写的程序
链接: