mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 02:15:45 +01:00 
			
		
		
		
	binman: Allow for skip_at_start when reading entries
The offset of an entry needs to be adjusted by its skip-at-start value. This is currently missing when reading entry data. Fix it. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
		| @@ -605,10 +605,12 @@ class Entry_section(Entry): | ||||
|     def ReadData(self, decomp=True): | ||||
|         tout.Info("ReadData path='%s'" % self.GetPath()) | ||||
|         parent_data = self.section.ReadData(True) | ||||
|         tout.Info('%s: Reading data from offset %#x-%#x, size %#x' % | ||||
|                   (self.GetPath(), self.offset, self.offset + self.size, | ||||
|                    self.size)) | ||||
|         data = parent_data[self.offset:self.offset + self.size] | ||||
|         offset = self.offset - self.section._skip_at_start | ||||
|         data = parent_data[offset:offset + self.size] | ||||
|         tout.Info( | ||||
|             '%s: Reading data from offset %#x-%#x (real %#x), size %#x, got %#x' % | ||||
|                   (self.GetPath(), self.offset, self.offset + self.size, offset, | ||||
|                    self.size, len(data))) | ||||
|         return data | ||||
|  | ||||
|     def ReadChildData(self, child, decomp=True): | ||||
|   | ||||
| @@ -4226,6 +4226,25 @@ class TestFunctional(unittest.TestCase): | ||||
|         expect = FILES_DATA[:15] + b'\0' + FILES_DATA[15:] | ||||
|         self.assertEqual(expect, data) | ||||
|  | ||||
|     def testReadImageSkip(self): | ||||
|         """Test reading an image and accessing its FDT map""" | ||||
|         data = self.data = self._DoReadFileRealDtb('191_read_image_skip.dts') | ||||
|         image_fname = tools.GetOutputFilename('image.bin') | ||||
|         orig_image = control.images['image'] | ||||
|         image = Image.FromFile(image_fname) | ||||
|         self.assertEqual(orig_image.GetEntries().keys(), | ||||
|                          image.GetEntries().keys()) | ||||
|  | ||||
|         orig_entry = orig_image.GetEntries()['fdtmap'] | ||||
|         entry = image.GetEntries()['fdtmap'] | ||||
|         self.assertEqual(orig_entry.offset, entry.offset) | ||||
|         self.assertEqual(orig_entry.size, entry.size) | ||||
|         self.assertEqual(16, entry.image_pos) | ||||
|  | ||||
|         u_boot = image.GetEntries()['section'].GetEntries()['u-boot'] | ||||
|  | ||||
|         self.assertEquals(U_BOOT_DATA, u_boot.ReadData()) | ||||
|  | ||||
|  | ||||
| if __name__ == "__main__": | ||||
|     unittest.main() | ||||
|   | ||||
							
								
								
									
										23
									
								
								tools/binman/test/191_read_image_skip.dts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								tools/binman/test/191_read_image_skip.dts
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,23 @@ | ||||
| // SPDX-License-Identifier: GPL-2.0+ | ||||
|  | ||||
| /dts-v1/; | ||||
|  | ||||
| / { | ||||
| 	#address-cells = <1>; | ||||
| 	#size-cells = <1>; | ||||
|  | ||||
| 	binman { | ||||
| 		end-at-4gb; | ||||
| 		size = <0x400>; | ||||
| 		section { | ||||
| 			size = <0x10>; | ||||
| 			u-boot { | ||||
| 			}; | ||||
| 		}; | ||||
| 		fdtmap { | ||||
| 		}; | ||||
| 		image-header { | ||||
| 			location = "end"; | ||||
| 		}; | ||||
| 	}; | ||||
| }; | ||||
		Reference in New Issue
	
	Block a user