Lines 84-89
class Kernel(object):
Link Here
|
84 |
'modules', 'build') |
84 |
'modules', 'build') |
85 |
|
85 |
|
86 |
@property |
86 |
@property |
|
|
87 |
def real_kv(self): |
88 |
""" Obtain the KV from the kernel, as used by it. """ |
89 |
vmlinuz = self.vmlinuz |
90 |
if vmlinuz is None: |
91 |
return None |
92 |
|
93 |
f = open(vmlinuz, 'rb') |
94 |
f.seek(0x200) |
95 |
buf = f.read(0x10) |
96 |
if buf[2:6] != b'HdrS': |
97 |
raise NotImplementedError('Invalid magic for kernel file %s (!= HdrS)' |
98 |
% path) |
99 |
offset = struct.unpack_from('H', buf, 0x0e)[0] |
100 |
f.seek(offset - 0x10, 1) |
101 |
buf = f.read(0x100) # XXX |
102 |
return str(buf.split(b' ', 1)[0]) |
103 |
|
104 |
@property |
87 |
def mtime(self): |
105 |
def mtime(self): |
88 |
# prefer vmlinuz, fallback to anything |
106 |
# prefer vmlinuz, fallback to anything |
89 |
# XXX: or maybe max()? min()? |
107 |
# XXX: or maybe max()? min()? |
Lines 145-162
class KernelDict(defaultdict):
Link Here
|
145 |
def __repr__(self): |
163 |
def __repr__(self): |
146 |
return 'KernelDict(%s)' % ','.join(['\n\t%s' % repr(x) for x in self.values()]) |
164 |
return 'KernelDict(%s)' % ','.join(['\n\t%s' % repr(x) for x in self.values()]) |
147 |
|
165 |
|
148 |
def get_real_kv(path): |
|
|
149 |
f = open(path, 'rb') |
150 |
f.seek(0x200) |
151 |
buf = f.read(0x10) |
152 |
if buf[2:6] != b'HdrS': |
153 |
raise NotImplementedError('Invalid magic for kernel file %s (!= HdrS)' |
154 |
% path) |
155 |
offset = struct.unpack_from('H', buf, 0x0e)[0] |
156 |
f.seek(offset - 0x10, 1) |
157 |
buf = f.read(0x100) # XXX |
158 |
return str(buf.split(b' ', 1)[0]) |
159 |
|
160 |
def find_kernels(exclusions = ()): |
166 |
def find_kernels(exclusions = ()): |
161 |
""" Find all files and directories related to installed kernels. """ |
167 |
""" Find all files and directories related to installed kernels. """ |
162 |
|
168 |
|
Lines 204-210
def find_kernels(exclusions = ()):
Link Here
|
204 |
if newk.build: |
210 |
if newk.build: |
205 |
kernels['%s.old' % kv].build = builddir |
211 |
kernels['%s.old' % kv].build = builddir |
206 |
if cat == 'vmlinuz': |
212 |
if cat == 'vmlinuz': |
207 |
realkv = get_real_kv(path) |
213 |
realkv = newk.real_kv |
208 |
moduledir = os.path.join('/lib/modules', realkv) |
214 |
moduledir = os.path.join('/lib/modules', realkv) |
209 |
builddir = paths[os.path.join(moduledir, 'build')] |
215 |
builddir = paths[os.path.join(moduledir, 'build')] |
210 |
if 'modules' not in exclusions and os.path.isdir(moduledir): |
216 |
if 'modules' not in exclusions and os.path.isdir(moduledir): |
211 |
- |
|
|