doit.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:2k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  *    By RidgeRun Inc.
  3.  *
  4.  *    The input to this program is intended to be
  5.  *    a compressed linux kernel. The output of this
  6.  *    program is then a constructed *.S file which
  7.  *    defines a large data structure -- the contents
  8.  *    of which represent the compressed kernel which
  9.  *    can subsequently be used in a program designed
  10.  *    to access that struture for decompression at
  11.  *    runtime and then subsequent kernel bootup.
  12.  *
  13.  *    Example Usage:
  14.  *       ./doit < piggy.gz > piggy.S
  15.  *
  16.  */
  17. #include <stdio.h>
  18. void printval(int i)
  19. {
  20. int tth, th, h, t, d;
  21. if (i > 99999) {
  22. printf("Error - printval outofboundsn");
  23. return;
  24. }
  25. tth = 0;
  26. th = 0;
  27. //tth = (i) / 10000;
  28. //th  = (i - (tth * 10000)) / 1000;
  29. h = (i - ((tth * 10000) + (th * 1000))) / 100;
  30. t = (i - ((tth * 10000) + (th * 1000) + (h * 100))) / 10;
  31. d = (i - ((tth * 10000) + (th * 1000) + (h * 100) + (t * 10)));
  32. //putchar(tth + '0');
  33. //putchar(th + '0');
  34. putchar(h + '0');
  35. putchar(t + '0');
  36. putchar(d + '0');
  37. }
  38. main(int argc, char **argv)
  39. {
  40. int val;
  41. int size = 0;
  42. unsigned char c;
  43. printf("gcc2_compiled.:n");
  44. printf("__gnu_compiled_c:n");
  45. printf("t.globl linux_compressed_startn");
  46. printf("t.textn");
  47. printf("t.align 2n");
  48. printf("t.type linux_compressed_start,@objectn");
  49. printf("linux_compressed_start:n");
  50. val = getchar();
  51. while (val != EOF) {
  52. size++;
  53. c = (unsigned char) (val & 0x00ff);
  54. printf("t.byte  ");
  55. printval((int) c);
  56. printf("n");
  57. val = getchar();
  58. }
  59. printf("t.size linux_compressed_start,%dn", size);
  60. printf("t.globl linux_compressed_sizen");
  61. printf("t.textn");
  62. printf("t.align 2n");
  63. printf("t.type linux_compressed_size,@objectn");
  64. printf("t.size linux_compressed_size,4n");
  65. printf("linux_compressed_size:n");
  66. printf("t.word %dn", size);
  67. }