kdataalign.c
上传用户:wudi5211
上传日期:2010-01-21
资源大小:607k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

C/C++

  1. /*
  2.  * kdatasize.c -- print the size of common data items from kernel space
  3.  *
  4.  * This runs with any Linux kernel (not any Unix, because of <linux/types.h>)
  5.  */
  6. #ifndef __KERNEL__
  7. #  define __KERNEL__
  8. #endif
  9. #ifndef MODULE
  10. #  define MODULE
  11. #endif
  12. #include <linux/config.h>
  13. #include <linux/module.h>
  14. #include <linux/kernel.h>
  15. #include <linux/types.h>
  16. #include <linux/utsname.h>
  17. #include <linux/errno.h>
  18. /*
  19.  * Define several data structures, all of them start with a lone char
  20.  * in order to present an unaligned offset for the next field
  21.  */
  22. struct c   {char c;  char      t;} c;
  23. struct s   {char c;  short     t;} s;
  24. struct i   {char c;  int       t;} i;
  25. struct l   {char c;  long      t;} l;
  26. struct ll  {char c;  long long t;} ll;
  27. struct p   {char c;  void *    t;} p;
  28. struct u1b {char c;  __u8      t;} u1b;
  29. struct u2b {char c;  __u16     t;} u2b;
  30. struct u4b {char c;  __u32     t;} u4b;
  31. struct u8b {char c;  __u64     t;} u8b;
  32. void cleanup_module(void)
  33. { /* never used */ }
  34. int init_module(void)
  35. {
  36.     /* print information and return an error */
  37.     printk("arch  Align:  char  short  int  long   ptr long-long "
  38.    " u8 u16 u32 u64n");
  39.     printk(       "%-12s  %3i   %3i   %3i   %3i   %3i   %3i      "
  40.    "%3i %3i %3i %3in",
  41.    system_utsname.machine,
  42.    /* note that gcc can subtract void * values, but it's not ansi */
  43.    (int)((void *)(&c.t)   - (void *)&c),
  44.    (int)((void *)(&s.t)   - (void *)&s),
  45.    (int)((void *)(&i.t)   - (void *)&i),
  46.    (int)((void *)(&l.t)   - (void *)&l),
  47.    (int)((void *)(&p.t)   - (void *)&p),
  48.    (int)((void *)(&ll.t)  - (void *)&ll),
  49.    (int)((void *)(&u1b.t) - (void *)&u1b),
  50.    (int)((void *)(&u2b.t) - (void *)&u2b),
  51.    (int)((void *)(&u4b.t) - (void *)&u4b),
  52.    (int)((void *)(&u8b.t) - (void *)&u8b));
  53.     return -ENODEV;
  54. }