static int fdt_stdout_setup(struct device_node *blob) { struct device_node *node, *alias; char sername[9] = { 0 }; const char *prop; struct console_device *cdev; int len; node = of_create_node(blob, "/chosen"); if (node == NULL) { pr_err("%s: could not open /chosen node\n", __func__); goto error; } cdev = console_get_first_active(); if (cdev) sprintf(sername, "serial%d", cdev->dev->id); else sprintf(sername, "serial%d", 0); alias = of_find_node_by_path_from(blob, "/aliases"); if (!alias) { pr_err("%s: could not get aliases node.\n", __func__); goto error; } prop = of_get_property(alias, sername, &len); of_set_property(node, "linux,stdout-path", prop, len, 1); return 0; error: return -ENODEV; }
/** * @brief provide the loady(Y-Modem or Y-Modem/G) support * * @param argc number of arguments * @param argv arguments of loady command * * @return success or failure */ static int do_loady(int argc, char *argv[]) { int is_ymodemg = 0, rc = 0, opt, rcode = 0; int load_baudrate = 0, current_baudrate; char *cname = NULL; struct console_device *cdev = NULL; while ((opt = getopt(argc, argv, "b:t:g")) > 0) { switch (opt) { case 'b': load_baudrate = (int)simple_strtoul(optarg, NULL, 10); break; case 'g': is_ymodemg = 1; break; case 't': cname = optarg; break; default: perror(argv[0]); return 1; } } if (cname) cdev = get_named_console(cname); else cdev = console_get_first_active(); if (!cdev) { printf("%s:No console device %s with STDIN and STDOUT\n", argv[0], cname ? cname : "default"); return -ENODEV; } current_baudrate = console_change_speed(cdev, load_baudrate); printf("## Ready for binary (ymodem) download at %d bps...\n", load_baudrate ? load_baudrate : current_baudrate); if (is_ymodemg) rc = do_load_serial_ymodemg(cdev); else rc = do_load_serial_ymodem(cdev); if (rc < 0) { printf("## Binary (ymodem) download aborted (%d)\n", rc); rcode = 1; } console_change_speed(cdev, current_baudrate); return rcode; }
static void *omap_serial_boot(void){ struct console_device *cdev; int ret; void *buf; int len; int fd; /* need temporary place to store file */ ret = mount("none", "ramfs", "/", NULL); if (ret < 0) { printf("failed to mount ramfs\n"); return NULL; } cdev = console_get_first_active(); if (!cdev) { printf("failed to get console\n"); return NULL; } fd = open("/barebox.bin", O_WRONLY | O_CREAT); if (fd < 0) { printf("could not create barebox.bin\n"); return NULL; } ret = do_load_serial_xmodem(cdev, fd); if (ret < 0) { printf("loadx failed\n"); return NULL; } buf = read_file("/barebox.bin", &len); if (!buf) printf("could not read barebox.bin from serial\n"); return buf; }
/** * @brief provide the loadx(X-Modem) support * * @param argc number of arguments * @param argv arguments of loadx command * * @return success or failure */ static int do_loadx(int argc, char *argv[]) { ulong offset = 0; int load_baudrate = 0, current_baudrate, ofd, opt, rcode = 0; int open_mode = O_WRONLY; char *output_file = NULL, *cname = NULL; struct console_device *cdev = NULL; while ((opt = getopt(argc, argv, "f:b:o:c")) > 0) { switch (opt) { case 'f': output_file = optarg; break; case 'b': load_baudrate = (int)simple_strtoul(optarg, NULL, 10); break; case 'o': offset = (int)simple_strtoul(optarg, NULL, 10); break; case 'c': open_mode |= O_CREAT; break; case 't': cname = optarg; break; default: perror(argv[0]); return 1; } } if (cname) cdev = get_named_console(cname); else cdev = console_get_first_active(); if (!cdev) { printf("%s:No console device %s with STDIN and STDOUT\n", argv[0], cname ? cname : "default"); return -ENODEV; } /* Load Defaults */ if (!output_file) output_file = DEF_FILE; /* File should exist */ ofd = open(output_file, open_mode); if (ofd < 0) { perror(argv[0]); return 3; } /* Seek to the right offset */ if (offset) { int seek = lseek(ofd, offset, SEEK_SET); if (seek != offset) { close(ofd); ofd = 0; perror(argv[0]); return 4; } } current_baudrate = console_change_speed(cdev, load_baudrate); printf("## Ready for binary (X-Modem) download " "to 0x%08lX offset on %s device at %d bps...\n", offset, output_file, load_baudrate); rcode = do_load_serial_ymodem(cdev); if (rcode < 0) { printf("## Binary (kermit) download aborted (%d)\n", rcode); rcode = 1; } console_change_speed(cdev, current_baudrate); return rcode; }