📄 proc_start_stop.c
字号:
#include <rtl.h>#include <time.h>#include <rtl_time.h>#include <pthread.h>#include <linux/proc_fs.h> /* create_proc_entry remove_proc_entry */pthread_t thread;hrtime_t start_nanosec;MODULE_LICENSE("GPL v2");MODULE_AUTHOR("Der Herr Hofrat");MODULE_DESCRIPTION("simple proc example");static int running=1;struct proc_dir_entry *proc_thread_status;void * start_routine(void *arg){ int i=0; struct sched_param p; hrtime_t elapsed_time,now; p . sched_priority = 1; pthread_setschedparam (pthread_self(), SCHED_FIFO, &p); pthread_make_periodic_np (pthread_self(), gethrtime(), 500000000); while (running) { pthread_wait_np (); now = clock_gethrtime(CLOCK_REALTIME); elapsed_time = now - start_nanosec; rtl_printf("elapsed_time = %Ld\n",(long long)elapsed_time); i++; } return (void *)i;}int get_status( char *page, char **start, off_t off, int count, int *eof, void *data){ int size = 0; MOD_INC_USE_COUNT; size+=sprintf(page+size,"Thread State:%d\n",(int)running); MOD_DEC_USE_COUNT; return(size);}static int set_status( struct file *file, const char *user_buffer, unsigned long count, void *data){ MOD_INC_USE_COUNT; /* brute force atoi - values should be checked in real apps */ running=(int)*user_buffer-'0'; printk("terminating rt-thread - set running to %x\n",running); MOD_DEC_USE_COUNT; return count;} int init_module(void) { int retval; start_nanosec = clock_gethrtime(CLOCK_REALTIME); retval = pthread_create (&thread, NULL, start_routine, 0); if(retval){ printk("pthread create failed\n"); return -1; } proc_thread_status = create_proc_entry("thread_status", S_IFREG | S_IWUSR, &proc_root); proc_thread_status->read_proc = get_status; proc_thread_status->write_proc = set_status; return 0;}void cleanup_module(void) { void * ret_val; pthread_cancel(thread); pthread_join(thread,&ret_val); printk("Thread terminated with %d\n",(int)ret_val); remove_proc_entry("thread_status", &proc_root);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -