10.1 reboot
首先,在/work/uClinux-dist/linux-2.4.x/kernel/sys.c文件里添加如下代码:
然后,修改/work/uClinux-dist/linux-2.4.x/arch/armnommu/kernel/calls.S文件,将它加入到系统调用表中:
在/work/uClinux-dist/linux-2.4.x/include/asm-armnommu/unistd.h文件内,定义系统调用号:
修改/work/uClinux-dist/linux-2.4.x/include/asm-armnommu/arch-firefox/system.h文件,申明该函数:
在/work/uClinux-dist/uClibc/libc/sysdeps/linux/common/syscalls.c文件内如下代码
注释掉/work/uClinux-dist/user/sash/reboot.c文件内的这几行代码,并添加restart( 0xffff0000 );
回到/work/uClinux-dist/目录,执行sudo make xconfig,选择“User Settings”选项,然后进行应用程序配置。
选择Core Applications->reboot,如下图:
保存退出,将程序下载进入开发板。
下载完成后,在命令行输入reboot,
开发板执行重启,并打印出了,
并且开发板执行重启。
10.2 按键重启
利用开发板上的按键,通过长按按键4秒,来执行开发板重启。在scu下新建一个restart的c文件。
基本思路:首先要使用按键,需要对GPIO进行初始化,然后再一个while()大循环里不断检测按键是否被按下,如果按键被按下,打开LED灯,用于反馈按键是否被按下,然后等待3秒,再判断按键是否被按下,这是为了防止意外的抖动造成系统被错误重启,如果此时按键被按下,说明是需要进行重启,等待1秒后,关闭LED灯,进行重启。完整程序如下:
修改Makefile文件,
编译通过以后,下载进入开发板,执行restart,按下按键,持续4秒以上,看到按下按键时,LED灯亮,过几秒一以后,LED灯灭,并且开发板重启。
10.3 总结
前半部分按照PPT上的步骤,可以很轻松的将开发板重启,后半部分代码部分要困难一些,想直接按下重启就完成,但是考虑到实际应用中,一般按键都需要一个防抖的检测,避免一些误操作,所以才实行延迟部分时间,但延时用sleep()是不好的,想用一个while()循环来做,但又不好设置多大的数才能表示1秒,所以参考了其他同学就用sleep()函数,但是,把他放入了单独定义的delay()函数里,便于以后修改。