From 13cfbfde2852b87dc033067ab4d5abbe6f8acf2e Mon Sep 17 00:00:00 2001 From: luojects Date: Sat, 20 Aug 2022 20:01:11 +0800 Subject: [PATCH] openamp_demo: add new feature pty * the demo realizes a simple pty shell to access zephyr * the demo shows an example collecting logs from zephyr * the demo multi-thread processes user requests Signed-off-by: luojects --- mcs/openamp_demo/Makefile | 7 +- mcs/openamp_demo/rpmsg-internal.h | 9 +- mcs/openamp_demo/rpmsg_app.c | 170 ++++++++++++++++++++++++++++++ mcs/openamp_demo/rpmsg_main.c | 116 +++++++++++--------- mcs/openamp_demo/rpmsg_ping.c | 101 +++++++++--------- mcs/zephyr/zephyr.bin | Bin 105392 -> 0 bytes mcs/zephyr/zephyr.elf | Bin 0 -> 1336560 bytes 7 files changed, 299 insertions(+), 104 deletions(-) create mode 100644 mcs/openamp_demo/rpmsg_app.c delete mode 100644 mcs/zephyr/zephyr.bin create mode 100755 mcs/zephyr/zephyr.elf diff --git a/mcs/openamp_demo/Makefile b/mcs/openamp_demo/Makefile index c293881e..daccc80d 100644 --- a/mcs/openamp_demo/Makefile +++ b/mcs/openamp_demo/Makefile @@ -1,5 +1,5 @@ -rpmsg_main: rpmsg_main.o rpmsg_ping.o - $(CC) rpmsg_main.o rpmsg_ping.o $(SDKTARGETSYSROOT)/usr/lib64/libmetal.so $(SDKTARGETSYSROOT)/usr/lib64/libopen_amp.so $(SDKTARGETSYSROOT)/lib64/libsysfs.so -o rpmsg_main +rpmsg_main: clean rpmsg_main.o rpmsg_ping.o rpmsg_app.o + $(CC) rpmsg_main.o rpmsg_ping.o rpmsg_app.o $(SDKTARGETSYSROOT)/usr/lib64/libmetal.so $(SDKTARGETSYSROOT)/usr/lib64/libopen_amp.so $(SDKTARGETSYSROOT)/lib64/libsysfs.so -o rpmsg_main rpmsg_main.o: rpmsg_main.c rpmsg-internal.h $(CC) -I$(SDKTARGETSYSROOT)/usr/include -c rpmsg_main.c -o rpmsg_main.o @@ -7,5 +7,8 @@ rpmsg_main.o: rpmsg_main.c rpmsg-internal.h rpmsg_ping.o: rpmsg_ping.c rpmsg-internal.h $(CC) -I$(SDKTARGETSYSROOT)/usr/include -c rpmsg_ping.c -o rpmsg_ping.o +rpmsg_app.o: rpmsg_ping.c rpmsg-internal.h + $(CC) -I$(SDKTARGETSYSROOT)/usr/include -c rpmsg_app.c -o rpmsg_app.o + clean: rm -rf *.o rpmsg_main diff --git a/mcs/openamp_demo/rpmsg-internal.h b/mcs/openamp_demo/rpmsg-internal.h index ebfde5fb..6e07328f 100644 --- a/mcs/openamp_demo/rpmsg-internal.h +++ b/mcs/openamp_demo/rpmsg-internal.h @@ -24,6 +24,13 @@ #define DEV_CLIENT_OS_AGENT "/dev/cpu_handler" extern char *cpu_id; +extern struct metal_io_region *io; + +void rpmsg_endpoint_init(void); +int receive_message(unsigned char *message, int message_len, int *real_len); +int send_message(unsigned char *message, int len); + +void *shell_user(void *arg); +void *log_user(void *arg); -void rpmsg_app_master(void); #endif diff --git a/mcs/openamp_demo/rpmsg_app.c b/mcs/openamp_demo/rpmsg_app.c new file mode 100644 index 00000000..749603ff --- /dev/null +++ b/mcs/openamp_demo/rpmsg_app.c @@ -0,0 +1,170 @@ +#define _XOPEN_SOURCE 600 +#include +#include +#include +#include +#include +#include + +#include "rpmsg-internal.h" + +/* define the keys according to your terminfo */ +#define KEY_CTRL_C 3 +#define KEY_BACKSPACE 127 +#define KEY_ENTER '\r' + +void open_pty(int *pfdm, int *pfds) +{ + int ret; + int fdm, fds; + + /* Open the master side of the PTY */ + fdm = posix_openpt(O_RDWR | O_NOCTTY); + if (fdm < 0) + printf("Error %d on posix_openpt()\n", errno); + + ret = grantpt(fdm); + if (ret != 0) + printf("Error %d on grantpt()\n", errno); + + ret = unlockpt(fdm); + if (ret != 0) + printf("Error %d on unlockpt()\n", errno); + + /* Open the slave side of the PTY */ + fds = open(ptsname(fdm), O_RDWR | O_NOCTTY); + printf("open a new terminal, exec zephyr shell: screen %s\n", ptsname(fdm)); + + *pfdm = fdm; + *pfds = fds; +} + +int simple_shell(int fdm, unsigned char *cmd, int cmd_len, int *real_len) +{ + int i; + int ret; + char display[64] = "\ruart:~$ "; + const int title_len = strlen(display); + int dislen = strlen(display); + int dislen_echo; + + memset(cmd, 0, cmd_len); + for (i = 0; i < cmd_len; i++) { + ret = read(fdm, &cmd[i], 1); + + display[dislen] = cmd[i]; + dislen++; + dislen_echo = dislen; + + if (cmd[i] == KEY_CTRL_C) { /* special key: ctrl+c */ + pthread_exit(NULL); + } + + if ((cmd[i] == KEY_BACKSPACE) && (dislen > title_len)) { /* special key: backspace */ + dislen -= 2; + display[dislen] = ' '; + dislen_echo = dislen + 1; + } + + if (cmd[i] == KEY_ENTER) { /* special key: enter */ + cmd[i] = '\n'; + break; + } + + ret = write(fdm, display, dislen_echo); /* the command echo */ + } + + ret = write(fdm, "\ruart:~$ ", title_len); /* override the command return from rtos */ + *real_len = i + 1; + return ret; +} + +void *shell_user(void *arg) +{ + int ret; + int fdm, fds; + unsigned char cmd[64] = {0}; + int cmd_len; + unsigned char reply[2048] = {0}; + int reply_len; + + /* open PTY, pts binds to terminal, using screen to open pts */ + open_pty(&fdm, &fds); + + while (1) { + ret = simple_shell(fdm, cmd, sizeof(cmd), &cmd_len); /* get command from ptmx */ + if (ret < 0) { + printf("shell_user: simple_shell(%s) failed: %d\n", cmd, ret); + return (void*)-1; + } + + ret = send_message(cmd, cmd_len); /* send command to rtos */ + if (ret < 0) { + printf("shell_user: send_message(%s) failed: %d\n", cmd, ret); + return (void*)-1; + } + + ret = receive_message(reply, sizeof(reply), &reply_len); /* receive reply from rtos */ + if (ret < 0) { + printf("shell_user: receive_message(%s) failed: %d\n", reply, ret); + return (void*)-1; + } + + ret = write(fdm, reply, reply_len); /* send reply to ptmx */ + if (ret < 0) { + printf("shell_user: write to ptmx(%s) failed: %d\n", reply, ret); + return (void*)-1; + } + } + + return (void*)0; +} + +void *log_user(void *arg) +{ + int ret; + int cmd_fd, log_fd; + unsigned char cmd[64] = {0}; + int cmd_len; + unsigned char log[2048] = {0}; + int log_len; + const char *cmd_file = "/tmp/zephyr_cmd.txt"; + const char *log_file = "/tmp/zephyr_log.txt"; + + /* read command from file */ + cmd_fd = open(cmd_file, O_RDONLY); + if (cmd_fd < 0) { + printf("log_user: open (%s) failed: %d\n", cmd_file, cmd_fd); + return (void*)-1; + } + cmd_len = read(cmd_fd, cmd, sizeof(cmd)); + cmd[cmd_len] = '\n'; + close(cmd_fd); + + ret = send_message(cmd, cmd_len + 1); /* send command to rtos */ + if (ret < 0) { + printf("shell_user: send_message(%s) failed: %d\n", cmd, ret); + return (void*)-1; + } + + ret = receive_message(log, sizeof(log), &log_len); /* receive log from rtos */ + if (ret < 0) { + printf("log_user: receive_message(%s) failed: %d\n", log, ret); + return (void*)-1; + } + + /* write log into file */ + log_fd = open(log_file, O_RDWR | O_CREAT | O_APPEND, 0644); + if (log_fd < 0) { + printf("log_user: open (%s) failed: %d\n", log_file, log_fd); + return (void*)-1; + } + ret = write(log_fd, log, log_len); + if (ret < 0) { + printf("log_user: write to file(%s) failed: %d\n", log_file, ret); + return (void*)-1; + } + close(log_fd); + + return (void*)0; +} diff --git a/mcs/openamp_demo/rpmsg_main.c b/mcs/openamp_demo/rpmsg_main.c index 037ec8e9..a95d0311 100644 --- a/mcs/openamp_demo/rpmsg_main.c +++ b/mcs/openamp_demo/rpmsg_main.c @@ -8,7 +8,6 @@ #include "rpmsg-internal.h" -#define MAX_BIN_BUFLEN (10 * 1024 * 1024) #define BOOTCMD_MAXSIZE 100 static struct remoteproc rproc_inst; @@ -16,48 +15,28 @@ static struct remoteproc_ops ops; char *cpu_id; static char *boot_address; -static char *target_binfile; -static char *target_binaddr; struct rproc_priv { struct remoteproc *rproc; unsigned int id; }; -static int load_bin(void) +static void cleanup(void) { - int memfd = open("/dev/mem", O_RDWR); - int bin_fd = open(target_binfile, O_RDONLY); - void *access_address = NULL, *bin_buffer = NULL; - long bin_size; - long long int bin_addr = strtoll(target_binaddr, NULL, 0); - - if (bin_fd < 0 || memfd < 0) { - printf("invalid bin file fd\n"); - exit(-1); - } - - bin_buffer = (void *)malloc(MAX_BIN_BUFLEN); - if (!bin_buffer) { - printf("malloc bin_buffer failed\n"); - exit(-1); - } - - bin_size = read(bin_fd, bin_buffer, MAX_BIN_BUFLEN); - if (bin_size == 0) { - printf("read bin file failed\n"); - exit(-1); - } + printf("\nOpenAMP demo ended.\n"); + remoteproc_stop(&rproc_inst); + remoteproc_remove(&rproc_inst); + if (io) + free(io); +} - access_address = mmap((void *)bin_addr, MAX_BIN_BUFLEN, PROT_READ | PROT_WRITE, - MAP_SHARED, memfd, bin_addr); - memcpy(access_address, bin_buffer, bin_size); - free(bin_buffer); - return 0; +static void handler(int sig) +{ + exit(0); } static struct remoteproc *rproc_init(struct remoteproc *rproc, - struct remoteproc_ops *ops, void *arg) + const struct remoteproc_ops *ops, void *arg) { struct rproc_priv *priv; unsigned int id = *((unsigned int *)arg); @@ -94,6 +73,16 @@ static int rproc_start(struct remoteproc *rproc) return 0; } +static int rproc_stop(struct remoteproc *rproc) +{ +#if 0 + /* send message to zephyr, zephyr shut itself down by PSCI */ + int ret = send_message("shutdown\r\n", 10); + sleep(3); +#endif + return 0; +} + static void rproc_remove(struct remoteproc *rproc) { struct rproc_priv *priv; @@ -106,6 +95,7 @@ struct remoteproc_ops rproc_ops = { .init = rproc_init, .remove = rproc_remove, .start = rproc_start, + .stop = rproc_stop, }; static struct remoteproc *platform_create_proc(unsigned int id) @@ -126,8 +116,15 @@ int main(int argc, char **argv) unsigned int id = 1; int ret; int opt; + pthread_t tida, tidb, tidc; + void *reta, *retb, *retc; - while ((opt = getopt(argc, argv, "c:b:t:a:")) != -1) { + /* ctrl+c signal, exit program and do cleanup */ + atexit(cleanup); + signal(SIGINT, handler); + + /* using qemu arg: -device loader,file=zephyr.elf,cpu-num=1 */ + while ((opt = getopt(argc, argv, "c:b:")) != -1) { switch (opt) { case 'c': cpu_id = optarg; @@ -135,12 +132,6 @@ int main(int argc, char **argv) case 'b': boot_address = optarg; break; - case 't': - target_binfile = optarg; - break; - case 'a': - target_binaddr = optarg; - break; default: break; } @@ -152,12 +143,6 @@ int main(int argc, char **argv) return -1; } - ret = load_bin(); - if (ret) { - printf("failed to load client os\n"); - return ret; - } - ret = remoteproc_start(rproc); if (ret) { printf("start processor failed\n"); @@ -166,8 +151,43 @@ int main(int argc, char **argv) sleep(5); printf("start processing OpenAMP demo...\n"); - rpmsg_app_master(); + rpmsg_endpoint_init(); + + /* Multi-thread processing user requests */ + printf("Multi-thread processing user requests...\n"); + + /* userA: user shell, open with screen */ + if (pthread_create(&tida, NULL, shell_user, NULL) < 0) { + perror("userA pthread_create"); + return -1; + } +#if 0 + /* userB: dual user shell, open with screen */ + if (pthread_create(&tidb, NULL, shell_user, NULL) < 0) { + perror("userB pthread_create"); + return -1; + } +#endif + /* userC: zephyr log */ + if (pthread_create(&tidc, NULL, log_user, NULL) < 0) { + perror("userC pthread_create"); + return -1; + } + + pthread_join(tida, &reta); + if ((long)reta) { + printf("userA return failed: %ld", (long)reta); + } +#if 0 + pthread_join(tidb, &retb); + if ((long)retb) { + printf("userB return failed: %ld", (long)retb); + } +#endif + pthread_join(tidc, &retc); + if ((long)retc) { + printf("userC return failed: %ld", (long)retc); + } - remoteproc_remove(rproc); - return ret; + return 0; } diff --git a/mcs/openamp_demo/rpmsg_ping.c b/mcs/openamp_demo/rpmsg_ping.c index 6cea999a..ff9b1135 100644 --- a/mcs/openamp_demo/rpmsg_ping.c +++ b/mcs/openamp_demo/rpmsg_ping.c @@ -18,11 +18,14 @@ static struct virtio_vring_info rvrings[2] = { }; static int g_memfd; -static volatile unsigned int received_data; +static unsigned char received_data[2048] = {0}; +static unsigned int received_len = 0; static struct virtio_device vdev; static struct rpmsg_virtio_device rvdev; -static struct metal_io_region *io; +struct metal_io_region *io; static struct virtqueue *vq[2]; +static void *tx_addr, *rx_addr, *shm_start_addr; +static metal_phys_addr_t shm_physmap[] = { SHM_START_ADDR }; static unsigned char virtio_get_status(struct virtio_device *vdev) { @@ -73,7 +76,9 @@ struct virtio_dispatch dispatch = { int endpoint_cb(struct rpmsg_endpoint *ept, void *data, size_t len, uint32_t src, void *priv) { - received_data = *((unsigned int *) data); + memcpy(received_data + received_len, data, len); + received_len += len; + return RPMSG_SUCCESS; } @@ -94,61 +99,71 @@ void ns_bind_cb(struct rpmsg_device *rdev, const char *name, uint32_t dest) rpmsg_service_unbind); } -static unsigned int receive_message(void) +/* message standard receive interface */ +int receive_message(unsigned char *message, int message_len, int *real_len) { + int ret = -1; int cpu_handler_fd; struct pollfd fds; - int ret; - + cpu_handler_fd = open(DEV_CLIENT_OS_AGENT, O_RDWR); if (cpu_handler_fd < 0) { - printf("open %s failed.\n", DEV_CLIENT_OS_AGENT); + printf("receive_message: open %s failed.\n", DEV_CLIENT_OS_AGENT); return cpu_handler_fd; } - + fds.fd = cpu_handler_fd; fds.events = POLLIN; - - printf("Master core waiting for messages.... \n"); + + /* clear the receive buffer */ + memset(received_data, 0, sizeof(received_data)); + received_len = 0; + while (1) { - ret = poll(&fds, 1, -1); + ret = poll(&fds, 1, 100); /* 100ms timeout */ if (ret < 0) { - printf("poll error.\n"); - close(cpu_handler_fd); - return ret; + printf("receive_message: poll failed.\n"); + *real_len = 0; + goto _cleanup; } - + if (ret == 0) { - printf("poll time out.\n"); - close(cpu_handler_fd); - return ret; + break; } - + if (fds.revents & POLLIN) { - printf("Master core receiving messages....\n"); - virtqueue_notification(vq[0]); - break; + virtqueue_notification(vq[0]); /* will call endpoint_cb */ } } + + if (received_len >= message_len) { + printf("receive_message: buffer is too small.\n"); + *real_len = 0; + goto _cleanup; + } + + memset(message, 0, message_len); + memcpy(message, received_data, received_len); + *real_len = received_len; + +_cleanup: close(cpu_handler_fd); - return received_data; + return ret; } -static int send_message(unsigned int message) +/* message standard send interface */ +int send_message(unsigned char *message, int len) { - return rpmsg_send(ep, &message, sizeof(message)); + return rpmsg_send(ep, message, len); } static struct rpmsg_virtio_shm_pool shpool; -void rpmsg_app_master(void) +void rpmsg_endpoint_init(void) { int status = 0; - unsigned int message = 0U; - void *tx_addr, *rx_addr, *shm_start_addr; - metal_phys_addr_t shm_physmap[] = { SHM_START_ADDR }; - - printf("\r\nOpenAMP[master] demo started\r\n"); + char message[100] = {0}; + int len; g_memfd = open("/dev/mem", O_RDWR); tx_addr = mmap((void *)VRING_TX_ADDRESS, VDEV_STATUS_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, g_memfd, VRING_TX_ADDRESS); @@ -176,7 +191,7 @@ void rpmsg_app_master(void) return; } - vdev.role = RPMSG_MASTER; + vdev.role = RPMSG_HOST; vdev.vrings_num = VRING_COUNT; vdev.func = &dispatch; rvrings[0].io = io; @@ -205,25 +220,5 @@ void rpmsg_app_master(void) /* Since we are using name service, we need to wait for a response * from NS setup and than we need to process it */ - receive_message(); - - while (message < 99) { - status = send_message(message); - if (status < 0) { - printf("send_message(%u) failed with status %d\n", - message, status); - goto _cleanup; - } - - sleep(1); - message = receive_message(); - printf("Master core received a message: %u\n", message); - - message++; - sleep(1); - } - -_cleanup: - free(io); - printf("OpenAMP demo ended.\n"); + (void)receive_message(message, sizeof(message), &len); } diff --git a/mcs/zephyr/zephyr.bin b/mcs/zephyr/zephyr.bin deleted file mode 100644 index 585dd2d37f30ff057677080ce98ed06fb1b0c2ae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 105392 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 XE$3fjx$pd|zEupL$+i1ezx{s#@cHM< diff --git a/mcs/zephyr/zephyr.elf b/mcs/zephyr/zephyr.elf new file mode 100755 index 0000000000000000000000000000000000000000..c7145bc26b204e3f2a0193a7a37ee02490b76c85 GIT binary patch literal 1336560 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