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):
 | 
			
		||||
        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";
 | 
			
		||||
		};
 | 
			
		||||
	};
 | 
			
		||||
};
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user