mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-11-04 05:50:17 +00: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:
		
							parent
							
								
									6eb9932668
								
							
						
					
					
						commit
						5c6ba71bbe
					
				@ -605,10 +605,12 @@ class Entry_section(Entry):
 | 
				
			|||||||
    def ReadData(self, decomp=True):
 | 
					    def ReadData(self, decomp=True):
 | 
				
			||||||
        tout.Info("ReadData path='%s'" % self.GetPath())
 | 
					        tout.Info("ReadData path='%s'" % self.GetPath())
 | 
				
			||||||
        parent_data = self.section.ReadData(True)
 | 
					        parent_data = self.section.ReadData(True)
 | 
				
			||||||
        tout.Info('%s: Reading data from offset %#x-%#x, size %#x' %
 | 
					        offset = self.offset - self.section._skip_at_start
 | 
				
			||||||
                  (self.GetPath(), self.offset, self.offset + self.size,
 | 
					        data = parent_data[offset:offset + self.size]
 | 
				
			||||||
                   self.size))
 | 
					        tout.Info(
 | 
				
			||||||
        data = parent_data[self.offset:self.offset + self.size]
 | 
					            '%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
 | 
					        return data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def ReadChildData(self, child, decomp=True):
 | 
					    def ReadChildData(self, child, decomp=True):
 | 
				
			||||||
 | 
				
			|||||||
@ -4226,6 +4226,25 @@ class TestFunctional(unittest.TestCase):
 | 
				
			|||||||
        expect = FILES_DATA[:15] + b'\0' + FILES_DATA[15:]
 | 
					        expect = FILES_DATA[:15] + b'\0' + FILES_DATA[15:]
 | 
				
			||||||
        self.assertEqual(expect, data)
 | 
					        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__":
 | 
					if __name__ == "__main__":
 | 
				
			||||||
    unittest.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";
 | 
				
			||||||
 | 
							};
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user