mirror of
https://git.yoctoproject.org/poky
synced 2026-05-30 00:20:08 +00:00
selftest/devtool: Add test to verify "modify virtual/kernel"
The purpose of this test case is to verify that devtool modify works correctly when building the kernel. [YOCTO #10817] (From OE-Core rev: 0fa3d331df7d5a5fbd8431febc75efe6bcc6f96b) Signed-off-by: Jose Perez Carranza <jose.perez.carranza@linux.intel.com> Signed-off-by: Ross Burton <ross.burton@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
cc2744267f
commit
b641052961
@@ -1606,3 +1606,88 @@ class DevtoolTests(DevtoolBase):
|
||||
checkvars['S'] = '${WORKDIR}/${BPN}-%s' % recipever
|
||||
checkvars['SRC_URI'] = url
|
||||
self._test_recipe_contents(newrecipefile, checkvars, [])
|
||||
|
||||
@testcase(1577)
|
||||
def test_devtool_virtual_kernel_modify(self):
|
||||
"""
|
||||
Summary: The purpose of this test case is to verify that
|
||||
devtool modify works correctly when building
|
||||
the kernel.
|
||||
Dependencies: NA
|
||||
Steps: 1. Build kernel with bitbake.
|
||||
2. Save the config file generated.
|
||||
3. Clean the environment.
|
||||
4. Use `devtool modify virtual/kernel` to validate following:
|
||||
4.1 The source is checked out correctly.
|
||||
4.2 The resulting configuration is the same as
|
||||
what was get on step 2.
|
||||
4.3 The Kernel can be build correctly.
|
||||
4.4 Changes made on the source are reflected on the
|
||||
subsequent builds.
|
||||
4.5 Changes on the configuration are reflected on the
|
||||
subsequent builds
|
||||
Expected: devtool modify is able to checkout the source of the kernel
|
||||
and modification to the source and configurations are reflected
|
||||
when building the kernel.
|
||||
"""
|
||||
#Set machine to qemxu86 to be able to modify the kernel and
|
||||
#verify the modification.
|
||||
features = 'MACHINE = "qemux86"\n'
|
||||
self.write_config(features)
|
||||
# Clean up the enviroment
|
||||
bitbake('linux-yocto -c cleansstate')
|
||||
tempdir = tempfile.mkdtemp(prefix='devtoolqa')
|
||||
self.track_for_cleanup(tempdir)
|
||||
self.track_for_cleanup(self.workspacedir)
|
||||
self.add_command_to_tearDown('bitbake-layers remove-layer */workspace')
|
||||
self.add_command_to_tearDown('bitbake -c clean linux-yocto')
|
||||
#Step 1
|
||||
#Here is just generated the config file instead of all the kernel to optimize the
|
||||
#time of executing this test case.
|
||||
bitbake('linux-yocto -c configure')
|
||||
bbconfig = os.path.join(get_bb_var('B',"linux-yocto"),'.config')
|
||||
buildir= get_bb_var('TOPDIR')
|
||||
#Step 2
|
||||
runCmd('cp %s %s' % (bbconfig, buildir))
|
||||
self.assertTrue(os.path.exists(os.path.join(buildir, '.config')),
|
||||
'Could not copy .config file from kernel')
|
||||
|
||||
tmpconfig = os.path.join(buildir, '.config')
|
||||
#Step 3
|
||||
bitbake('linux-yocto -c cleanall')
|
||||
#Step 4.1
|
||||
runCmd('devtool modify virtual/kernel -x %s' % tempdir)
|
||||
self.assertTrue(os.path.exists(os.path.join(tempdir, 'Makefile')),
|
||||
'Extracted source could not be found')
|
||||
#Step 4.2
|
||||
configfile = os.path.join(tempdir,'.config')
|
||||
diff = runCmd('diff %s %s' % (tmpconfig, configfile))
|
||||
self.assertEqual(0,diff.status,'Kernel .config file is not the same using bitbake and devtool')
|
||||
#Step 4.3
|
||||
#NOTE: virtual/kernel is mapped to linux-yocto
|
||||
result = runCmd('devtool build linux-yocto')
|
||||
self.assertEqual(0,result.status,'Cannot build kernel using `devtool build`')
|
||||
kernelfile = os.path.join(get_bb_var('KBUILD_OUTPUT',"linux-yocto"), 'vmlinux')
|
||||
self.assertTrue(os.path.exists(kernelfile),'Kernel was not build correctly')
|
||||
|
||||
#Modify the kernel source, this is specific for qemux86
|
||||
modfile = os.path.join(tempdir,'arch/x86/boot/header.S')
|
||||
modstring = "use a boot loader - Devtool kernel testing"
|
||||
modapplied = runCmd("sed -i 's/boot loader/%s/' %s" % (modstring, modfile))
|
||||
self.assertEqual(0,modapplied.status,'Modification to %s on kernel source failed' % modfile)
|
||||
#Modify the configuration
|
||||
codeconfigfile = os.path.join(tempdir,'.config.new')
|
||||
modconfopt = "CONFIG_SG_POOL=n"
|
||||
modconf = runCmd("sed -i 's/CONFIG_SG_POOL=y/%s/' %s" % (modconfopt, codeconfigfile))
|
||||
self.assertEqual(0,modconf.status,'Modification to %s failed' % codeconfigfile)
|
||||
#Build again kernel with devtool
|
||||
rebuild = runCmd('devtool build linux-yocto')
|
||||
self.assertEqual(0,rebuild.status,'Fail to build kernel after modification of source and config')
|
||||
#Step 4.4
|
||||
bzimagename = 'bzImage-' + get_bb_var('KERNEL_VERSION_NAME',"linux-yocto")
|
||||
bzimagefile = os.path.join(get_bb_var('D',"linux-yocto"),'boot', bzimagename)
|
||||
checkmodcode = runCmd("grep '%s' %s" % (modstring, bzimagefile))
|
||||
self.assertEqual(0,checkmodcode.status,'Modification on kernel source failed')
|
||||
#Step 4.5
|
||||
checkmodconfg = runCmd("grep %s %s" % (modconfopt, codeconfigfile))
|
||||
self.assertEqual(0,checkmodconfg.status,'Modification to configuration file failed')
|
||||
|
||||
Reference in New Issue
Block a user