forked from joninvski/ts_7500_kernel
Kernel for the ts-7500 devices
License
cnm/ts7500_kernel
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
===================================================== Go get the kernel at: ftp://ftp.embeddedarm.com/ts-arm-sbc/ts-7500-linux/sources/ Then: # make ts7500_defconfig #Removed as .config is included in the git repo (YOU NO LONGER NEED TO DO IT) make make modules make modules_install ===================================================== Version: linux-2.6.24-cavium_source_jun082011.tar.gz ===================================================== Fred alterations were: ====================== In arch/arm/kernel/calls.S: CALL(sys_ni_syscall) CALL(sys_miavitasetseconds) /* 355 */ CALL(sys_miavitameansyscall) CALL(sys_miavitasyscall) In include/asm-arm/unistd.h: #define __MR_miavitasetseconds (__NR_SYSCALL_BASE+354) #define __MR_miavitameansyscall (__NR_SYSCALL_BASE+355) #define __NR_miavitasyscall (__NR_SYSCALL_BASE+356) In include/linux/miavita_xtime.h: #ifndef __MIAVITA_XTIME_H__ #define __MIAVITA_XTIME_H__ #include <linux/time.h> extern uint64_t __miavita_elapsed_secs, __miavita_elapsed_usecs; extern void init_miavita_xtime(void); extern void pulse_miavita_xtime(void); #endif In include/linux/syscalls.h: asmlinkage int sys_miavitasetseconds(uint64_t secs); asmlinkage int sys_miavitameansyscall(uint64_t __user * res); asmlinkage int sys_miavitasyscall(uint64_t __user * res); In ipc/Makefile: obj-$(CONFIG_SYSVIPC) += util.o msgutil.o msg.o sem.o shm.o miavita_syscall.o In ipc/miavita_syscall.c: #include <linux/module.h> #include <linux/linkage.h> #include <linux/kernel.h> #include <asm/uaccess.h> #include <linux/errno.h> #include <linux/miavita_xtime.h> uint64_t __miavita_elapsed_secs = 0, __miavita_elapsed_usecs = 0, __last_diff = 0; EXPORT_SYMBOL(__miavita_elapsed_secs); EXPORT_SYMBOL(__miavita_elapsed_usecs); void init_miavita_xtime(void){ struct timeval t; do_gettimeofday(&t); printk("FIRST MICROS %ld\n", t.tv_usec); __miavita_elapsed_usecs = t.tv_usec; printk("STORED MICROS %lld\n", __miavita_elapsed_usecs); } EXPORT_SYMBOL(init_miavita_xtime); void pulse_miavita_xtime(void){ struct timeval t; uint64_t temp_t; do_gettimeofday(&t); if(__miavita_elapsed_secs != 0){ temp_t = t.tv_usec; if(temp_t < __miavita_elapsed_usecs) temp_t += 1000000; __last_diff = (temp_t - __miavita_elapsed_usecs); } __miavita_elapsed_usecs = t.tv_usec; __miavita_elapsed_secs++; } EXPORT_SYMBOL(pulse_miavita_xtime); /* * Mia-Vita's syscall to know microseconds from gps. * This must return the seconds with microsecond precision. */ asmlinkage int sys_miavitasyscall(uint64_t __user * res){ struct timeval t; int64_t check; unsigned long ret; do_gettimeofday(&t); if( ((uint64_t) t.tv_usec) < __miavita_elapsed_usecs) t.tv_usec += 1000000; check = __miavita_elapsed_secs * 1000000 + (( (uint64_t)t.tv_usec ) - __miavita_elapsed_usecs) ; if(check < 0) printk(KERN_EMERG "Don't know how but i'm returnning a negative value %lld = %llu + (%llu - %llu)\n", check, __miavita_elapsed_secs * 1000000, (uint64_t)t.tv_usec, __miavita_elapsed_usecs); ret = copy_to_user(res, &check, sizeof(uint64_t)); if(ret){ printk(KERN_EMERG "Copy_to_user failed with %lu not copied.\n", ret); return -ENOMEM; } return 0; } asmlinkage int sys_miavitameansyscall(uint64_t __user * res){ unsigned long ret; ret = copy_to_user(res, &__last_diff, sizeof(uint64_t)); if(ret){ printk(KERN_EMERG "Copy_to_user failed with %lu bytes not copied.\n", ret); return -ENOMEM; } return 0; } asmlinkage int sys_miavitasetseconds(uint64_t secs){ __miavita_elapsed_secs = secs; return 0; }
About
Kernel for the ts-7500 devices
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published
Languages
- C 94.1%
- Assembly 3.3%
- C++ 2.3%
- Objective-C 0.2%
- Perl 0.1%
- Shell 0.0%