Blame view
cmd/cramfs.c
4.95 KB
83d290c56 SPDX: Convert all... |
1 |
// SPDX-License-Identifier: GPL-2.0+ |
88ffb2665 CRAMFS: support c... |
2 |
/* |
88ffb2665 CRAMFS: support c... |
3 4 5 6 7 8 9 10 11 12 13 14 15 |
* * based on: cmd_jffs2.c * * Add support for a CRAMFS located in RAM */ /* * CRAMFS support */ #include <common.h> #include <command.h> #include <malloc.h> |
511c66b1e cmd: cramfs: use ... |
16 |
#include <mapmem.h> |
88ffb2665 CRAMFS: support c... |
17 18 19 20 21 |
#include <linux/list.h> #include <linux/ctype.h> #include <jffs2/jffs2.h> #include <jffs2/load_kernel.h> #include <cramfs/cramfs_fs.h> |
511c66b1e cmd: cramfs: use ... |
22 |
#include <asm/io.h> |
88ffb2665 CRAMFS: support c... |
23 24 25 26 27 28 29 30 31 32 |
/* enable/disable debugging messages */ #define DEBUG_CRAMFS #undef DEBUG_CRAMFS #ifdef DEBUG_CRAMFS # define DEBUGF(fmt, args...) printf(fmt ,##args) #else # define DEBUGF(fmt, args...) #endif |
ee8bc961a cramfs: fix bug i... |
33 |
#include <flash.h> |
88ffb2665 CRAMFS: support c... |
34 |
|
e856bdcfb flash: complete C... |
35 |
#ifndef CONFIG_MTD_NOR_FLASH |
62a813bca cramfs: make cram... |
36 37 38 39 |
# define OFFSET_ADJUSTMENT 0 #else # define OFFSET_ADJUSTMENT (flash_info[id.num].start[0]) #endif |
59e12a4a8 fs: Kconfig: Add ... |
40 |
#ifndef CONFIG_FS_JFFS2 |
88ffb2665 CRAMFS: support c... |
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
#include <linux/stat.h> char *mkmodestr(unsigned long mode, char *str) { static const char *l = "xwr"; int mask = 1, i; char c; switch (mode & S_IFMT) { case S_IFDIR: str[0] = 'd'; break; case S_IFBLK: str[0] = 'b'; break; case S_IFCHR: str[0] = 'c'; break; case S_IFIFO: str[0] = 'f'; break; case S_IFLNK: str[0] = 'l'; break; case S_IFSOCK: str[0] = 's'; break; case S_IFREG: str[0] = '-'; break; default: str[0] = '?'; } for(i = 0; i < 9; i++) { c = l[i%3]; str[9-i] = (mode & mask)?c:'-'; mask = mask<<1; } if(mode & S_ISUID) str[3] = (mode & S_IXUSR)?'s':'S'; if(mode & S_ISGID) str[6] = (mode & S_IXGRP)?'s':'S'; if(mode & S_ISVTX) str[9] = (mode & S_IXOTH)?'t':'T'; str[10] = '\0'; return str; } |
59e12a4a8 fs: Kconfig: Add ... |
71 |
#endif /* CONFIG_FS_JFFS2 */ |
88ffb2665 CRAMFS: support c... |
72 73 74 75 76 77 78 |
extern int cramfs_check (struct part_info *info); extern int cramfs_load (char *loadoffset, struct part_info *info, char *filename); extern int cramfs_ls (struct part_info *info, char *filename); extern int cramfs_info (struct part_info *info); /***************************************************/ |
a187559e3 Use correct spell... |
79 |
/* U-Boot commands */ |
88ffb2665 CRAMFS: support c... |
80 81 82 83 84 85 86 87 88 89 90 91 92 |
/***************************************************/ /** * Routine implementing fsload u-boot command. This routine tries to load * a requested file from cramfs filesystem at location 'cramfsaddr'. * cramfsaddr is an evironment variable. * * @param cmdtp command internal data * @param flag command flag * @param argc number of arguments supplied to the command * @param argv arguments list * @return 0 on success, 1 otherwise */ |
54841ab50 Make sure that ar... |
93 |
int do_cramfs_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
88ffb2665 CRAMFS: support c... |
94 95 96 97 |
{ char *filename; int size; ulong offset = load_addr; |
511c66b1e cmd: cramfs: use ... |
98 |
char *offset_virt; |
88ffb2665 CRAMFS: support c... |
99 100 101 102 103 104 |
struct part_info part; struct mtd_device dev; struct mtdids id; ulong addr; |
00caae6d4 env: Rename geten... |
105 |
addr = simple_strtoul(env_get("cramfsaddr"), NULL, 16); |
88ffb2665 CRAMFS: support c... |
106 107 108 109 110 111 112 113 114 |
/* hack! */ /* cramfs_* only supports NOR flash chips */ /* fake the device type */ id.type = MTD_DEV_TYPE_NOR; id.num = 0; dev.id = &id; part.dev = &dev; /* fake the address offset */ |
511c66b1e cmd: cramfs: use ... |
115 |
part.offset = (u64)(uintptr_t) map_sysmem(addr - OFFSET_ADJUSTMENT, 0); |
88ffb2665 CRAMFS: support c... |
116 117 |
/* pre-set Boot file name */ |
00caae6d4 env: Rename geten... |
118 119 |
filename = env_get("bootfile"); if (!filename) |
88ffb2665 CRAMFS: support c... |
120 |
filename = "uImage"; |
88ffb2665 CRAMFS: support c... |
121 122 123 124 125 126 127 128 129 |
if (argc == 2) { filename = argv[1]; } if (argc == 3) { offset = simple_strtoul(argv[1], NULL, 0); load_addr = offset; filename = argv[2]; } |
511c66b1e cmd: cramfs: use ... |
130 |
offset_virt = map_sysmem(offset, 0); |
88ffb2665 CRAMFS: support c... |
131 132 |
size = 0; if (cramfs_check(&part)) |
511c66b1e cmd: cramfs: use ... |
133 |
size = cramfs_load (offset_virt, &part, filename); |
88ffb2665 CRAMFS: support c... |
134 135 |
if (size > 0) { |
88ffb2665 CRAMFS: support c... |
136 137 138 |
printf("### CRAMFS load complete: %d bytes loaded to 0x%lx ", size, offset); |
018f53032 env: Rename commo... |
139 |
env_set_hex("filesize", size); |
88ffb2665 CRAMFS: support c... |
140 141 142 143 |
} else { printf("### CRAMFS LOAD ERROR<%x> for %s! ", size, filename); } |
511c66b1e cmd: cramfs: use ... |
144 145 |
unmap_sysmem(offset_virt); unmap_sysmem((void *)(uintptr_t)part.offset); |
88ffb2665 CRAMFS: support c... |
146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
return !(size > 0); } /** * Routine implementing u-boot ls command which lists content of a given * directory at location 'cramfsaddr'. * cramfsaddr is an evironment variable. * * @param cmdtp command internal data * @param flag command flag * @param argc number of arguments supplied to the command * @param argv arguments list * @return 0 on success, 1 otherwise */ |
54841ab50 Make sure that ar... |
160 |
int do_cramfs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
88ffb2665 CRAMFS: support c... |
161 162 163 164 165 166 167 168 |
{ char *filename = "/"; int ret; struct part_info part; struct mtd_device dev; struct mtdids id; ulong addr; |
00caae6d4 env: Rename geten... |
169 |
addr = simple_strtoul(env_get("cramfsaddr"), NULL, 16); |
88ffb2665 CRAMFS: support c... |
170 171 172 173 174 175 176 177 178 |
/* hack! */ /* cramfs_* only supports NOR flash chips */ /* fake the device type */ id.type = MTD_DEV_TYPE_NOR; id.num = 0; dev.id = &id; part.dev = &dev; /* fake the address offset */ |
511c66b1e cmd: cramfs: use ... |
179 |
part.offset = (u64)(uintptr_t) map_sysmem(addr - OFFSET_ADJUSTMENT, 0); |
88ffb2665 CRAMFS: support c... |
180 181 182 183 184 185 186 |
if (argc == 2) filename = argv[1]; ret = 0; if (cramfs_check(&part)) ret = cramfs_ls (&part, filename); |
511c66b1e cmd: cramfs: use ... |
187 |
unmap_sysmem((void *)(uintptr_t)part.offset); |
88ffb2665 CRAMFS: support c... |
188 189 190 191 192 193 194 195 196 |
return ret ? 0 : 1; } /* command line only */ /***************************************************/ U_BOOT_CMD( cramfsload, 3, 0, do_cramfs_load, |
cc9f607be various cmd_* fil... |
197 |
"load binary file from a filesystem image", |
88ffb2665 CRAMFS: support c... |
198 199 200 201 202 203 204 205 206 |
"[ off ] [ filename ] " " - load binary file from address 'cramfsaddr' " " with offset 'off' " ); U_BOOT_CMD( cramfsls, 2, 1, do_cramfs_ls, |
cc9f607be various cmd_* fil... |
207 |
"list files in a directory (default /)", |
88ffb2665 CRAMFS: support c... |
208 209 210 211 212 |
"[ directory ] " " - list files in a directory. " ); |