CHDK_DE Vorschauversion  Trunk Rev. 6014
 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
boot.c-Dateireferenz
#include "lolevel.h"
#include "platform.h"
#include "core.h"
#include "asmsafe.h"
+ Include-Abhängigkeitsdiagramm für boot.c:

gehe zum Quellcode dieser Datei

Makrodefinitionen

#define YELLOW_LED   0xC02200B0
 

Funktionen

void createHook (void *pNewTcb)
 
void deleteHook (void *pTcb)
 
void boot ()
 
void __attribute__ ((naked, noinline))
 *-------------------------------------------------------------------— Mehr ...
 

Variablen

const char *const new_sa = &_end
 
long wrs_kernel_bss_start
 
long wrs_kernel_bss_end
 

Makro-Dokumentation

#define YELLOW_LED   0xC02200B0

Dokumentation der Funktionen

void __attribute__ ( (naked, noinline)  )

*-------------------------------------------------------------------—

!!

IS_ERROR( hSoundHandle )

IS_ERROR( RetCode )

IS_ERROR( RetCode )

IS_ERROR( RetCode )

IS_ERROR( RetCode )

"MOV R3, #0\n" "STR R3, [R9]\n"

TODO! below is from sd400

"MOV R3, #0\n" "STR R3, [R9]\n"

TODO! below is from sd400

__MovieRecorder_c__100

__MovieRecorder_c__100

Definiert in Zeile 21 der Datei boot.c.

26  {
27  asm volatile (
28  " STMFD SP!, {R0-R9,LR}\n"
29 );
30  int i, j;
31  for (j=0; j<n; j++)
32  {
33  *((volatile int *) YELLOW_LED) = 0x46; // Turn on LED
34  for (i=0; i<0x200000; i++) { asm volatile ( "nop \n" ); }
35 
36  *((volatile int *) YELLOW_LED) = 0x44; // Turn off LED
37  for (i=0; i<0x400000; i++) { asm volatile ( "nop \n" ); }
38  }
39  for (i=0; i<0x900000; i++) { asm volatile ( "nop \n" ); }
40  asm volatile (
41  " LDMFD SP!, {R0-R9,PC}\n"
42  );
43 }
void boot ( )

Definiert in Zeile 38 der Datei boot.c.

38  { //#fs
39  long *canon_data_src = (void*)0xFFEBFB4C;
40  long *canon_data_dst = (void*)0x1900;
41  long canon_data_len = 0xD700 - 0x1900; // data_end - data_start
42  long *canon_bss_start = (void*)0xD700; // just after data
43  long canon_bss_len = 0xA47E0 - 0xD700;
44 
45  long i;
46 
47 
48  // Code taken from VxWorks CHDK. Changes CPU speed?
49  asm volatile (
50  "MRC p15, 0, R0,c1,c0\n"
51  "ORR R0, R0, #0x1000\n"
52  "ORR R0, R0, #4\n"
53  "ORR R0, R0, #1\n"
54  "MCR p15, 0, R0,c1,c0\n"
55  :::"r0");
56 
57  for(i=0;i<canon_data_len/4;i++)
58  canon_data_dst[i]=canon_data_src[i];
59 
60  for(i=0;i<canon_bss_len/4;i++)
61  canon_bss_start[i]=0;
62 
63 /* asm volatile (
64  "MRC p15, 0, R0,c1,c0\n"
65  "ORR R0, R0, #0x1000\n"
66  "BIC R0, R0, #4\n"
67  "ORR R0, R0, #1\n"
68  "MCR p15, 0, R0,c1,c0\n"
69  :::"r0");
70 */
71 
72  *(int*)0x1930=(int)taskCreateHook;
73  *(int*)0x1934=(int)taskCreateHook;
74  *(int*)0x1938=(int)taskCreateHook2;
75 
76  // jump to init-sequence that follows the data-copy-routine
77  asm volatile ("B sub_FFC001A4_my\n");
78 }; //#fe
void createHook ( void *  pNewTcb)

Definiert in Zeile 110 der Datei main.c.

111 {
112  char *name = (char*)(*(long*)((char*)pNewTcb+0x34));
113  long *entry = (long*)((char*)pNewTcb+0x74);
114 
115  // always hook first task creation
116  // to create SpyProc
117  if (!stop_hooking){
118  task_prev = (void*)(*entry);
119  *entry = (long)task_start_hook;
120  stop_hooking = 1;
121  } else {
122  // hook/replace another tasks
123  if (my_ncmp(name, "tPhySw", 6) == 0){
124  *entry = (long)physw_hook;
125  }
126 
127  if (my_ncmp(name, "tInitFileM", 10) == 0){
128  init_file_modules_prev = (void*)(*entry);
129 #if CAM_MULTIPART
130  *entry = (long)init_file_modules_task;
131 #else
132  *entry = (long)init_file_modules_hook;
133 #endif
134  }
135 
136  if (my_ncmp(name, "tCaptSeqTa", 10) == 0){
137  *entry = (long)capt_seq_hook;
138  }
139 
140 #if CAM_CHDK_HAS_EXT_VIDEO_MENU
141  if (my_ncmp(name, "tMovieReco", 10) == 0){
142  *entry = (long)movie_record_hook;
143  }
144 #endif
145 
146 #if CAM_EXT_TV_RANGE
147  if (my_ncmp(name, "tExpDrvTas", 10) == 0){
148  *entry = (long)exp_drv_task;
149  }
150 #endif
151 
152 #if CAM_HAS_FILEWRITETASK_HOOK
153  if (my_ncmp(name, "tFileWrite", 10) == 0){
154  *entry = (long)filewritetask;
155  }
156 #endif
157 
158 // for cameras that have a "touch control dial" with 'TouchW' task.
159 // some cameras may use a different task name
160 #ifdef HOOK_TOUCHW
161  if (my_ncmp(name, "tTouchW", 7) == 0){
162  *entry = (long)my_touchw_task;
163  }
164 #endif
165 
166  core_hook_task_create(pNewTcb);
167  }
168 }
void deleteHook ( void *  pTcb)

Definiert in Zeile 170 der Datei main.c.

171 {
172  core_hook_task_delete(pTcb);
173 }

Variablen-Dokumentation

const char* const new_sa = &_end

Definiert in Zeile 9 der Datei boot.c.

long wrs_kernel_bss_end
long wrs_kernel_bss_start