forked from joninvski/ts_7500_kernel
-
Notifications
You must be signed in to change notification settings - Fork 0
Kernel for the ts-7500 devices
License
cnm/ts7500_kernel
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%