mirror of
https://git.yoctoproject.org/poky
synced 2026-04-21 21:32:12 +02:00
package.bbclass: Improve kernel module handling
Currently the kernel module handling consists of several special cases and has its own path walking. This refactors the code to handle them in a more standardised way which is also a bit more efficient. (From OE-Core rev: ad51b54f0afe8c56033137b7cf9ba398877b2651) (From OE-Core rev: cb24a72e97afb43de5e1e79ff807fd9e184df6a2) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
@@ -325,10 +325,6 @@ def runstrip(file, elftype, d):
|
||||
pathprefix = "export PATH=%s; " % d.getVar('PATH', True)
|
||||
strip = d.getVar("STRIP", True)
|
||||
|
||||
# Handle kernel modules specifically - .debug directories here are pointless
|
||||
if file.find("/lib/modules/") != -1 and file.endswith(".ko"):
|
||||
return subprocess.call("%s'%s' --strip-debug --remove-section=.comment --remove-section=.note --preserve-dates '%s'" % (pathprefix, strip, file), shell=True)
|
||||
|
||||
newmode = None
|
||||
if not os.access(file, os.W_OK) or os.access(file, os.R_OK):
|
||||
origmode = os.stat(file)[stat.ST_MODE]
|
||||
@@ -337,15 +333,14 @@ def runstrip(file, elftype, d):
|
||||
|
||||
extraflags = ""
|
||||
|
||||
# split_and_strip_files is calling this with elf_type None, causing:
|
||||
# TypeError: unsupported operand type(s) for &: 'NoneType' and 'int'
|
||||
if elftype:
|
||||
# .so and shared library
|
||||
if ".so" in file and elftype & 8:
|
||||
extraflags = "--remove-section=.comment --remove-section=.note --strip-unneeded"
|
||||
# shared or executable:
|
||||
elif elftype & 8 or elftype & 4:
|
||||
extraflags = "--remove-section=.comment --remove-section=.note"
|
||||
# .so and shared library
|
||||
if elftype & 16:
|
||||
extraflags = "--strip-debug --remove-section=.comment --remove-section=.note --preserve-dates"
|
||||
elif ".so" in file and elftype & 8:
|
||||
extraflags = "--remove-section=.comment --remove-section=.note --strip-unneeded"
|
||||
# shared or executable:
|
||||
elif elftype & 8 or elftype & 4:
|
||||
extraflags = "--remove-section=.comment --remove-section=.note"
|
||||
|
||||
stripcmd = "'%s' %s '%s'" % (strip, extraflags, file)
|
||||
bb.debug(1, "runstrip: %s" % stripcmd)
|
||||
@@ -749,6 +744,7 @@ python split_and_strip_files () {
|
||||
# 2 - stripped
|
||||
# 4 - executable
|
||||
# 8 - shared library
|
||||
# 16 - kernel module
|
||||
def isELF(path):
|
||||
type = 0
|
||||
pathprefix = "export PATH=%s; " % d.getVar('PATH', True)
|
||||
@@ -775,11 +771,16 @@ python split_and_strip_files () {
|
||||
#
|
||||
file_list = {}
|
||||
file_links = {}
|
||||
kernmods = []
|
||||
if (d.getVar('INHIBIT_PACKAGE_DEBUG_SPLIT', True) != '1') and \
|
||||
(d.getVar('INHIBIT_PACKAGE_STRIP', True) != '1'):
|
||||
for root, dirs, files in os.walk(dvar):
|
||||
for f in files:
|
||||
file = os.path.join(root, f)
|
||||
if file.endswith(".ko") and file.find("/lib/modules/") != -1:
|
||||
kernmods.append(file)
|
||||
continue
|
||||
|
||||
# Only process files (and symlinks)... Skip files that are obviously debug files
|
||||
if not (debugappend != "" and file.endswith(debugappend)) and \
|
||||
not (debugdir != "" and debugdir in os.path.dirname(file[len(dvar):])) and \
|
||||
@@ -910,14 +911,8 @@ python split_and_strip_files () {
|
||||
elf_file = int(file_list[file][5:])
|
||||
#bb.note("Strip %s" % file)
|
||||
runstrip(file, elf_file, d)
|
||||
|
||||
|
||||
if (d.getVar('INHIBIT_PACKAGE_STRIP', True) != '1'):
|
||||
for root, dirs, files in os.walk(dvar):
|
||||
for f in files:
|
||||
if not f.endswith(".ko"):
|
||||
continue
|
||||
runstrip(os.path.join(root, f), 0, d)
|
||||
for f in kernmods:
|
||||
runstrip(f, 16, d)
|
||||
#
|
||||
# End of strip
|
||||
#
|
||||
|
||||
Reference in New Issue
Block a user