Initial commit
Some checks failed
Build Kernel / Build all affected Kernels (push) Has been cancelled
Build all core packages / Build all core packages for selected target (push) Has been cancelled
Build and Push prebuilt tools container / Build and Push all prebuilt containers (push) Has been cancelled
Build Toolchains / Build Toolchains for each target (push) Has been cancelled
Build host tools / Build host tools for linux and macos based systems (push) Has been cancelled
Coverity scan build / Coverity x86/64 build (push) Has been cancelled
Some checks failed
Build Kernel / Build all affected Kernels (push) Has been cancelled
Build all core packages / Build all core packages for selected target (push) Has been cancelled
Build and Push prebuilt tools container / Build and Push all prebuilt containers (push) Has been cancelled
Build Toolchains / Build Toolchains for each target (push) Has been cancelled
Build host tools / Build host tools for linux and macos based systems (push) Has been cancelled
Coverity scan build / Coverity x86/64 build (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
--- a/lib/libubigen.c
|
||||
+++ b/lib/libubigen.c
|
||||
@@ -122,8 +122,9 @@ int ubigen_add_volume(const struct ubige
|
||||
return 0;
|
||||
}
|
||||
|
||||
-void ubigen_init_ec_hdr(const struct ubigen_info *ui,
|
||||
- struct ubi_ec_hdr *hdr, long long ec)
|
||||
+static void __ubigen_init_ec_hdr(const struct ubigen_info *ui,
|
||||
+ struct ubi_ec_hdr *hdr, long long ec,
|
||||
+ int eof)
|
||||
{
|
||||
uint32_t crc;
|
||||
|
||||
@@ -136,10 +137,22 @@ void ubigen_init_ec_hdr(const struct ubi
|
||||
hdr->data_offset = cpu_to_be32(ui->data_offs);
|
||||
hdr->image_seq = cpu_to_be32(ui->image_seq);
|
||||
|
||||
+ if (eof) {
|
||||
+ hdr->padding1[0] = 'E';
|
||||
+ hdr->padding1[1] = 'O';
|
||||
+ hdr->padding1[2] = 'F';
|
||||
+ }
|
||||
+
|
||||
crc = mtd_crc32(UBI_CRC32_INIT, hdr, UBI_EC_HDR_SIZE_CRC);
|
||||
hdr->hdr_crc = cpu_to_be32(crc);
|
||||
}
|
||||
|
||||
+void ubigen_init_ec_hdr(const struct ubigen_info *ui,
|
||||
+ struct ubi_ec_hdr *hdr, long long ec)
|
||||
+{
|
||||
+ __ubigen_init_ec_hdr(ui, hdr, ec, 0);
|
||||
+}
|
||||
+
|
||||
void ubigen_init_vid_hdr(const struct ubigen_info *ui,
|
||||
const struct ubigen_vol_info *vi,
|
||||
struct ubi_vid_hdr *hdr, int lnum,
|
||||
@@ -307,6 +320,39 @@ int ubigen_write_layout_vol(const struct
|
||||
}
|
||||
|
||||
free(outbuf);
|
||||
+ return 0;
|
||||
+
|
||||
+out_free:
|
||||
+ free(outbuf);
|
||||
+ return -1;
|
||||
+}
|
||||
+
|
||||
+int ubigen_write_eof_markers(const struct ubigen_info *ui, long long ec,
|
||||
+ int count, int out_fd)
|
||||
+{
|
||||
+ char *outbuf;
|
||||
+ int peb_size = ui->peb_size;
|
||||
+
|
||||
+ outbuf = malloc(peb_size);
|
||||
+ if (!outbuf) {
|
||||
+ sys_errmsg("cannot allocate %d bytes of memory", peb_size);
|
||||
+ return -1;
|
||||
+ }
|
||||
+
|
||||
+ memset(outbuf, 0xFF, peb_size);
|
||||
+ __ubigen_init_ec_hdr(ui, (struct ubi_ec_hdr *)outbuf, ec, 1);
|
||||
+
|
||||
+ while (count) {
|
||||
+ if (write(out_fd, outbuf, peb_size) != peb_size) {
|
||||
+ sys_errmsg("cannot write %d bytes to the output file",
|
||||
+ peb_size);
|
||||
+ goto out_free;
|
||||
+ }
|
||||
+
|
||||
+ count--;
|
||||
+ }
|
||||
+
|
||||
+ free(outbuf);
|
||||
return 0;
|
||||
|
||||
out_free:
|
||||
--- a/include/libubigen.h
|
||||
+++ b/include/libubigen.h
|
||||
@@ -187,6 +187,9 @@ int ubigen_write_layout_vol(const struct
|
||||
long long ec1, long long ec2,
|
||||
struct ubi_vtbl_record *vtbl, int fd);
|
||||
|
||||
+int ubigen_write_eof_markers(const struct ubigen_info *ui, long long ec,
|
||||
+ int count, int out_fd);
|
||||
+
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user