digic:processors:lime
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revisionLast revisionBoth sides next revision | ||
digic:processors:lime [2021/03/06 21:13] – created jack001214 | digic:processors:lime [2021/03/13 13:34] – [LIME CORE] Indy | ||
---|---|---|---|
Line 2: | Line 2: | ||
Lime core is the networking processor which was found to be present in DIGIC 7 and above. The main motive behind this was to ease debugging by using a network-based debugger [[https:// | Lime core is the networking processor which was found to be present in DIGIC 7 and above. The main motive behind this was to ease debugging by using a network-based debugger [[https:// | ||
- | All the investigations below were done under 200D(SL2) at version 1.0.1. | + | All the investigations below were done under 200D (SL2) at version 1.0.1. |
+ | [[https:// | ||
==== LIME Shell ==== | ==== LIME Shell ==== | ||
- | The networking processor was found to have a dryos implementation with an interactive shell which can be accessed from the ICU through UART. | + | The networking processor was found to have a DryOS implementation with an interactive shell which can be accessed from the ICU through UART. |
- | Now before accessing it, the lime core needs to be powered on. This can simply be done from the canon GUI where the WIFI can be enabled | + | Now before accessing it, the Lime core needs to be powered on. This can simply be done from the Canon GUI where the WIFI can be enabled (WPS led blinking). |
Interestingly enough a new category is added to the ICU dry shell help command(''?'' | Interestingly enough a new category is added to the ICU dry shell help command(''?'' | ||
< | < | ||
Line 22: | Line 23: | ||
... | ... | ||
</ | </ | ||
- | This log most likely showed the interactions from the ICU to the LIME core on the lower level as it was filled with '' | + | This log most likely showed the interactions from the ICU to the Lime core on the lower level as it was filled with '' |
Now from the dry shell(ICU), executing '' | Now from the dry shell(ICU), executing '' | ||
Line 56: | Line 57: | ||
|ram: | |ram: | ||
==== Musa(ICU) & LIME communication ==== | ==== Musa(ICU) & LIME communication ==== | ||
- | '' | + | '' |
- | Every registered function which can be called from the ICU to LIME has the prefix of '' | + | Every registered function which can be called from the ICU to Lime has the prefix of '' |
=== Lime === | === Lime === | ||
Approximately 53 functions can be ' | Approximately 53 functions can be ' | ||
- | There are multiple tables but '' | + | There are multiple tables but '' |
Every function which can be called is on a table at **0x01a9f9a5**(CommonSyncWrite) and the first one being '' | Every function which can be called is on a table at **0x01a9f9a5**(CommonSyncWrite) and the first one being '' | ||
Line 79: | Line 80: | ||
|ram: | |ram: | ||
- | === Musa(ICU) === | + | === Musa (ICU) === |
- | function **FUN_E07146B8** takes in three parameters which apparently lookup the table on the lime core and processes the function on the lime core and returns the result back to the ICU. | + | function **FUN_E07146B8** takes in three parameters which apparently lookup the table on the Lime core, processes the function on the Lime core and returns the result back to the ICU. |
< | < | ||
- | Canon already has many ' | + | Canon already has many ' |
For example '' | For example '' | ||
Line 92: | Line 93: | ||
Here are the common networking stubs found: | Here are the common networking stubs found: | ||
- | ^ | + | ^ |
- | ^Address ^Name ^Info^ | + | ^Address ^Name ^Signatures |
- | |0xe0110cc4|socket_convertfd|(found from xrefs of FUN_E07146B8)| | + | |0xe0110cc4|socket_convertfd|int socket_convertfd(int sockfd) |
- | |0xe071d880|socket_create|translation from ICU to lime is needed with resolvesock| | + | |0xe071d880|socket_create|int socket_create(int domain, int type, int protocol); |
- | |0xe071d8b8|socket_bind|found from index, CommonSyncWrite| | + | |0xe071d8b8|socket_bind|int socket_bind(int sockfd, void *addr, int addrlen) |
- | |0xe071d8f2|socket_connect|found from index, CommonSyncWrite| | + | |0xe071d8f2|socket_connect|int socket_connect(int sockfd, void *addr, int addrlen) |
- | |0xe071d92c|socket_listen|found from index, CommonSyncWrite| | + | |0xe071d92c|socket_listen|int socket_listen(int sockfd, int backlogl) |
- | |0xe071d960|socket_accept|found from rpc_accept| | + | |0xe071d960|socket_accept|int socket_accept(int sockfd, void *addr, int addrlen) |
- | |0xe071d99a|socket_recv|found from ' | + | |0xe071d99a|socket_recv|int socket_recv(int sockfd, void *buf, int len, int flags) |
- | |0xe071d9d8|socket_recvfrom|found from ' | + | |0xe071da20|socket_send|socket_send(int sockfd, void *buf, int len, int flags) |
- | |0xe071da20|socket_send|found from index, CommonSyncWrite| | + | |0xe071da80|socket_setsockopt|socket_setsockopt(int socket, int level, int option_name, |
- | |0xe071da3a|socket_sendto|found from index, CommonSyncWrite| | + | |0xe071db7a|socket_shutdown|socket_shutdown(int sockfd, int flag) |found from index, CommonSyncWrite| |
- | |0xe071da80|socket_setsockopt|found from ' | + | |0xe0714a20|socket_close|socket_close(int sockfd) |
- | |0xe071dac4|socket_getsockopt|found from ' | + | |0xe010608e|socket_select_caller| socket_select_caller(int convertedsock, |
- | |0xe071db7a|socket_shutdown|found from index, CommonSyncWrite| | + | |
- | |0xe010608e|socket_select_caller|found from ' | + | |
'' | '' | ||
Line 147: | Line 146: | ||
</ | </ | ||
==== Misc ==== | ==== Misc ==== | ||
+ | ^ | ||
+ | ^Option^Value^Info^ | ||
+ | |AF_INET|0x1|Internet IP Protocol| | ||
+ | |||
^ | ^ | ||
^Option^Value^Info^ | ^Option^Value^Info^ | ||
|SOL_SOCKET|0xffff|options at the socket level| | |SOL_SOCKET|0xffff|options at the socket level| | ||
|SO_REUSEADDR| 0x2|allow reuse of local addresses| | |SO_REUSEADDR| 0x2|allow reuse of local addresses| | ||
+ | |||
+ | '' | ||
+ | < | ||
+ | char sockaddr[8]; | ||
+ | |||
+ | // 1 = IPv4, 2 = IPv6, 3 = Ethernet | ||
+ | sockaddr[0] = 0x00; | ||
+ | sockaddr[1] = 0x01; | ||
+ | |||
+ | // port 25565 | ||
+ | sockaddr[2] = 0x63; // low byte | ||
+ | sockaddr[3] = 0xdd; // high byte | ||
+ | |||
+ | // ip address: 192.168.10.22 | ||
+ | sockaddr[4] = 192; | ||
+ | sockaddr[5] = 168; | ||
+ | sockaddr[6] = 10; | ||
+ | sockaddr[7] = 22; | ||
+ | </ | ||
+ | < | ||
+ | socket_bind(sock, | ||
+ | socket_connect(sock, | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
digic/processors/lime.txt · Last modified: 2021/03/16 12:01 by coon