Skip to content

Commit 3503ace

Browse files
committed
Add multitarget loader project
1 parent 9e1e979 commit 3503ace

File tree

6 files changed

+492
-0
lines changed

6 files changed

+492
-0
lines changed

loader/CMakeLists.txt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
3+
#set(DTC_OVERLAY_FILE ${BOARD}.overlay)
4+
5+
cmake_minimum_required(VERSION 3.20.0)
6+
7+
find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE})
8+
9+
project(app LANGUAGES C CXX)
10+
11+
FILE(GLOB app_sources *.c)
12+
target_sources(app PRIVATE ${app_sources})

loader/boards/arduino_giga_r1_m7.conf

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
CONFIG_USB_DEVICE_STACK=y
2+
CONFIG_USB_DEVICE_PRODUCT="Arduino GIGA R1"
3+
CONFIG_USB_DEVICE_MANUFACTURER="Arduino"
4+
CONFIG_USB_DEVICE_VID=0x2341
5+
CONFIG_USB_DEVICE_PID=0x0066
6+
7+
CONFIG_USB_CDC_ACM=y
8+
CONFIG_USB_CDC_ACM_RINGBUF_SIZE=512
9+
CONFIG_UART_LINE_CTRL=y
10+
CONFIG_CDC_ACM_DTE_RATE_CALLBACK_SUPPORT=y
11+
12+
CONFIG_FPU=y
13+
14+
CONFIG_ADC=y
15+
CONFIG_PWM=y
Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
&zephyr_udc0 {
2+
cdc_acm_uart0: cdc_acm_uart0 {
3+
compatible = "zephyr,cdc-acm-uart";
4+
status = "okay";
5+
};
6+
};
7+
8+
&usart1 {
9+
status = "okay";
10+
};
11+
12+
&usart6 {
13+
status = "okay";
14+
};
15+
16+
&i2c4 {
17+
status = "okay";
18+
};
19+
20+
&spi1 {
21+
status = "okay";
22+
pinctrl-0 = <&spi1_nss_pa4 &spi1_sck_pb3
23+
&spi1_miso_pg9 &spi1_mosi_pd7>;
24+
pinctrl-names = "default";
25+
};
26+
27+
28+
&spi5 {
29+
status = "okay";
30+
};
31+
32+
&adc1 {
33+
pinctrl-0 = <&adc1_inp4_pc4
34+
&adc1_inp8_pc5
35+
&adc1_inp9_pb0
36+
&adc1_inp5_pb1
37+
&adc1_inp13_pc3
38+
&adc1_inp12_pc2
39+
&adc1_inp10_pc0
40+
&adc1_inp16_pa0>;
41+
pinctrl-names = "default";
42+
st,adc-clock-source = <SYNC>;
43+
st,adc-prescaler = <4>;
44+
status = "okay";
45+
46+
#address-cells = <1>;
47+
#size-cells = <0>;
48+
49+
channel@4 {
50+
reg = <4>;
51+
zephyr,gain = "ADC_GAIN_1";
52+
zephyr,reference = "ADC_REF_INTERNAL";
53+
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
54+
zephyr,resolution = <12>;
55+
};
56+
channel@8 {
57+
reg = <8>;
58+
zephyr,gain = "ADC_GAIN_1";
59+
zephyr,reference = "ADC_REF_INTERNAL";
60+
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
61+
zephyr,resolution = <12>;
62+
};
63+
channel@9 {
64+
reg = <9>;
65+
zephyr,gain = "ADC_GAIN_1";
66+
zephyr,reference = "ADC_REF_INTERNAL";
67+
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
68+
zephyr,resolution = <12>;
69+
};
70+
channel@5 {
71+
reg = <5>;
72+
zephyr,gain = "ADC_GAIN_1";
73+
zephyr,reference = "ADC_REF_INTERNAL";
74+
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
75+
zephyr,resolution = <12>;
76+
};
77+
channel@13 {
78+
reg = <13>;
79+
zephyr,gain = "ADC_GAIN_1";
80+
zephyr,reference = "ADC_REF_INTERNAL";
81+
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
82+
zephyr,resolution = <12>;
83+
};
84+
channel@12 {
85+
reg = <12>;
86+
zephyr,gain = "ADC_GAIN_1";
87+
zephyr,reference = "ADC_REF_INTERNAL";
88+
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
89+
zephyr,resolution = <12>;
90+
};
91+
channel@10 {
92+
reg = <10>;
93+
zephyr,gain = "ADC_GAIN_1";
94+
zephyr,reference = "ADC_REF_INTERNAL";
95+
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
96+
zephyr,resolution = <12>;
97+
};
98+
channel@16 {
99+
reg = <16>;
100+
zephyr,gain = "ADC_GAIN_1";
101+
zephyr,reference = "ADC_REF_INTERNAL";
102+
zephyr,acquisition-time = <ADC_ACQ_TIME_MAX>;
103+
zephyr,resolution = <12>;
104+
};
105+
};
106+
107+
/ {
108+
soc {
109+
flash-controller@52002000 {
110+
flash0: flash@8000000 {
111+
compatible = "st,stm32-nv-flash", "soc-nv-flash";
112+
write-block-size = <32>;
113+
erase-block-size = <DT_SIZE_K(128)>;
114+
/* maximum erase time for a 128K sector */
115+
max-erase-time = <4000>;
116+
117+
reg = <0x08000000 DT_SIZE_K(1024)>;
118+
status = "okay";
119+
120+
partitions {
121+
compatible = "fixed-partitions";
122+
#address-cells = <1>;
123+
#size-cells = <1>;
124+
125+
user_sketch: partition@0 {
126+
reg = <0x0E0000 0x20000>;
127+
};
128+
};
129+
};
130+
};
131+
};
132+
};
133+
134+
/ {
135+
zephyr,user {
136+
digital-pin-gpios = <&arduino_header 6 0>,
137+
<&arduino_header 7 0>,
138+
<&arduino_header 8 0>,
139+
<&arduino_header 9 0>,
140+
<&arduino_header 10 0>,
141+
<&arduino_header 11 0>,
142+
<&arduino_header 12 0>,
143+
<&arduino_header 13 0>,
144+
<&arduino_header 14 0>,
145+
<&arduino_header 15 0>,
146+
<&arduino_header 16 0>,
147+
<&arduino_header 17 0>,
148+
<&arduino_header 18 0>,
149+
<&arduino_header 19 0>,
150+
<&arduino_header 20 0>,
151+
<&arduino_header 21 0>,
152+
<&arduino_header 0 0>,
153+
<&arduino_header 1 0>,
154+
<&arduino_header 2 0>,
155+
<&arduino_header 3 0>,
156+
<&arduino_header 4 0>,
157+
<&arduino_header 5 0>,
158+
<&gpioc 0 0>,
159+
<&gpioa 0 0>,
160+
<&gpioi 12 GPIO_ACTIVE_LOW>,
161+
<&gpioj 13 GPIO_ACTIVE_LOW>,
162+
<&gpioe 3 GPIO_ACTIVE_LOW>;
163+
164+
builtin-led-gpios = <&gpioi 12 GPIO_ACTIVE_LOW>,
165+
<&gpioj 13 GPIO_ACTIVE_LOW>,
166+
<&gpioe 3 GPIO_ACTIVE_LOW>;
167+
168+
pwm-pin-gpios = <&arduino_header 6 0>,
169+
<&arduino_header 5 0>,
170+
<&arduino_header 17 0>,
171+
<&arduino_header 12 0>,
172+
<&arduino_header 2 0>,
173+
<&arduino_header 3 0>,
174+
<&arduino_header 9 0>,
175+
<&arduino_header 10 0>;
176+
177+
adc-pin-gpios = <&arduino_header 0 0>,
178+
<&arduino_header 1 0>,
179+
<&arduino_header 2 0>,
180+
<&arduino_header 3 0>,
181+
<&arduino_header 4 0>,
182+
<&arduino_header 5 0>,
183+
<&gpioc 0 0>,
184+
<&gpioa 0 0>;
185+
186+
serials = <&cdc_acm_uart0>, <&usart1>, <&usart6>;
187+
cdc-acm = <&cdc_acm_uart0>;
188+
i2cs = <&i2c4>;
189+
spis = <&spi1>, <&spi5>;
190+
pwms = <>;
191+
192+
io-channels = <&adc1 4>,
193+
<&adc1 8>,
194+
<&adc1 9>,
195+
<&adc1 5>,
196+
<&adc1 13>,
197+
<&adc1 12>,
198+
<&adc1 10>,
199+
<&adc1 16>;
200+
};
201+
};

loader/llext_exports.c

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
#include <string.h>
2+
#include <zephyr/llext/symbol.h>
3+
#include <zephyr/usb/usb_device.h>
4+
#include <ctype.h>
5+
#include <stdio.h>
6+
#include <stdlib.h>
7+
#include <math.h>
8+
9+
#define FORCE_EXPORT_SYM(name) \
10+
extern void name(void); \
11+
EXPORT_SYMBOL(name);
12+
13+
EXPORT_SYMBOL(strrchr);
14+
EXPORT_SYMBOL(strstr);
15+
EXPORT_SYMBOL(strncmp);
16+
EXPORT_SYMBOL(strncpy);
17+
EXPORT_SYMBOL(strcmp);
18+
EXPORT_SYMBOL(strlen);
19+
EXPORT_SYMBOL(strchr);
20+
EXPORT_SYMBOL(memmove);
21+
22+
EXPORT_SYMBOL(malloc);
23+
EXPORT_SYMBOL(realloc);
24+
EXPORT_SYMBOL(calloc);
25+
EXPORT_SYMBOL(free);
26+
EXPORT_SYMBOL(rand);
27+
EXPORT_SYMBOL(srand);
28+
29+
EXPORT_SYMBOL(atof);
30+
EXPORT_SYMBOL(atol);
31+
EXPORT_SYMBOL(isspace);
32+
EXPORT_SYMBOL(isalnum);
33+
EXPORT_SYMBOL(tolower);
34+
EXPORT_SYMBOL(toupper);
35+
36+
#if defined(CONFIG_USB_DEVICE_STACK)
37+
EXPORT_SYMBOL(usb_enable);
38+
EXPORT_SYMBOL(usb_disable);
39+
#endif
40+
41+
EXPORT_SYMBOL(z_log_msg_runtime_vcreate);
42+
43+
#if defined(CONFIG_NETWORKING)
44+
FORCE_EXPORT_SYM(net_if_foreach);
45+
FORCE_EXPORT_SYM(net_if_get_by_iface);
46+
#endif
47+
48+
#if defined(CONFIG_NET_DHCPV4)
49+
FORCE_EXPORT_SYM(net_dhcpv4_start);
50+
#if defined(CONFIG_NET_DHCPV4_OPTION_CALLBACKS)
51+
FORCE_EXPORT_SYM(net_dhcpv4_add_option_callback);
52+
#endif
53+
#endif
54+
55+
#if defined(CONFIG_NET_MGMT_EVENT)
56+
FORCE_EXPORT_SYM(net_mgmt_add_event_callback);
57+
#endif
58+
59+
60+
#if defined(CONFIG_NET_SOCKETS)
61+
FORCE_EXPORT_SYM(getaddrinfo);
62+
FORCE_EXPORT_SYM(socket);
63+
FORCE_EXPORT_SYM(connect);
64+
FORCE_EXPORT_SYM(send);
65+
FORCE_EXPORT_SYM(recv);
66+
FORCE_EXPORT_SYM(open);
67+
FORCE_EXPORT_SYM(close);
68+
EXPORT_SYMBOL(exit);
69+
#endif
70+
71+
#if defined(CONFIG_CDC_ACM_DTE_RATE_CALLBACK_SUPPORT)
72+
FORCE_EXPORT_SYM(cdc_acm_dte_rate_callback_set);
73+
#endif
74+
75+
FORCE_EXPORT_SYM(k_timer_init);
76+
//FORCE_EXPORT_SYM(k_timer_user_data_set);
77+
//FORCE_EXPORT_SYM(k_timer_start);
78+
79+
EXPORT_SYMBOL(sin);
80+
EXPORT_SYMBOL(cos);
81+
EXPORT_SYMBOL(tan);
82+
EXPORT_SYMBOL(atan);
83+
84+
EXPORT_SYMBOL(puts);
85+
EXPORT_SYMBOL(putchar);
86+
EXPORT_SYMBOL(printf);
87+
EXPORT_SYMBOL(sprintf);
88+
EXPORT_SYMBOL(snprintf);
89+
EXPORT_SYMBOL(cbvprintf);
90+
91+
FORCE_EXPORT_SYM(abort);
92+
#if defined(CONFIG_RING_BUFFER)
93+
FORCE_EXPORT_SYM(ring_buf_get);
94+
FORCE_EXPORT_SYM(ring_buf_peek);
95+
FORCE_EXPORT_SYM(ring_buf_put);
96+
#endif
97+
EXPORT_SYMBOL(sys_clock_cycle_get_32);
98+
FORCE_EXPORT_SYM(__aeabi_dcmpun);
99+
FORCE_EXPORT_SYM(__aeabi_dcmple);
100+
FORCE_EXPORT_SYM(__aeabi_d2lz);
101+
FORCE_EXPORT_SYM(__aeabi_uldivmod);
102+
FORCE_EXPORT_SYM(__aeabi_ui2d);
103+
FORCE_EXPORT_SYM(__aeabi_dcmplt);
104+
FORCE_EXPORT_SYM(__aeabi_ddiv);
105+
FORCE_EXPORT_SYM(__aeabi_dmul);
106+
FORCE_EXPORT_SYM(__aeabi_d2f);
107+
FORCE_EXPORT_SYM(__aeabi_fcmpun);
108+
FORCE_EXPORT_SYM(__aeabi_dadd);
109+
FORCE_EXPORT_SYM(__aeabi_fcmple);
110+
FORCE_EXPORT_SYM(__aeabi_idiv);
111+
FORCE_EXPORT_SYM(__aeabi_dcmpgt);
112+
FORCE_EXPORT_SYM(__aeabi_dsub);
113+
FORCE_EXPORT_SYM(__aeabi_i2d);
114+
FORCE_EXPORT_SYM(__aeabi_uidiv);
115+
FORCE_EXPORT_SYM(__aeabi_l2d);
116+
FORCE_EXPORT_SYM(__aeabi_d2uiz);
117+
FORCE_EXPORT_SYM(__aeabi_uidivmod);
118+
FORCE_EXPORT_SYM(__aeabi_dcmpeq);
119+
FORCE_EXPORT_SYM(__aeabi_d2iz);
120+
FORCE_EXPORT_SYM(__aeabi_f2d);
121+
FORCE_EXPORT_SYM(__aeabi_idivmod);

0 commit comments

Comments
 (0)