I've build a Standard SDK using yocto
bitbake angstrom-lxde-image -c populate_sdk
I made sure that the kernel sources are included in the SDK
TOOLCHAIN_TARGET_TASK_append = "kernel-devsrc"
After installing the generated SDK at my workstation (separate machine from my
build host), I verified that the kernel sources are present
In the directory where the SDK has been installed, the kernel subdirectory has
been added.
datawatt@O-LINUX-1:~/toolchain/sysroots/armv7at2hf-neon-angstrom-linux-gnueabi/usr/src$
tree -L 1
.
├── backfire
├── debug
└── kernel
3 directories, 0 files
Next I'm trying to build a simple LKM
* First I source the environment setup script
*********
I'm using this c-source:
/**
* @file hello.c
* @author Derek Molloy
* @date 4 April 2015
* @version 0.1
* @brief An introductory "Hello World!" loadable kernel module (LKM) that can
display a message
* in the /var/log/kern.log file when the module is loaded and removed. The
module can accept an
* argument when it is loaded -- the name, which appears in the kernel log files.
* @see http://www.derekmolloy.ie/ for a full description and follow-up
descriptions.
*/
#include <linux/init.h> // Macros used to mark up functions e.g.,
__init __exit
#include <linux/module.h> // Core header for loading LKMs into the
kernel
#include <linux/kernel.h> // Contains types, macros, functions for
the kernel
MODULE_LICENSE("GPL"); ///< The license type -- this affects
runtime behavior
MODULE_AUTHOR("Derek Molloy"); ///< The author -- visible when you use
modinfo
MODULE_DESCRIPTION("A simple Linux driver for the BBB."); ///< The description
-- see modinfo
MODULE_VERSION("0.1"); ///< The version of the module
static char *name = "world"; ///< An example LKM argument -- default
value is "world"
module_param(name, charp, S_IRUGO); ///< Param desc. charp = char ptr, S_IRUGO
can be read/not changed
MODULE_PARM_DESC(name, "The name to display in /var/log/kern.log"); ///<
parameter description
/** @brief The LKM initialization function
* The static keyword restricts the visibility of the function to within this C
file. The __init
* macro means that for a built-in driver (not a LKM) the function is only used
at initialization
* time and that it can be discarded and its memory freed up after that point.
* @return returns 0 if successful
*/
static int __init helloBBB_init(void){
printk(KERN_INFO "EBB: Hello %s from the BBB LKM!\n", name);
return 0;
}
/** @brief The LKM cleanup function
* Similar to the initialization function, it is static. The __exit macro
notifies that if this
* code is used for a built-in driver (not a LKM) that this function is not
required.
*/
static void __exit helloBBB_exit(void){
printk(KERN_INFO "EBB: Goodbye %s from the BBB LKM!\n", name);
}
/** @brief A module must use the module_init() module_exit() macros from
linux/init.h, which
* identify the initialization function at insertion time and the cleanup
function (as
* listed above)
*/
module_init(helloBBB_init);
module_exit(helloBBB_exit);
**********
And this makefile:
datawatt@O-LINUX-1:~/workspace-lkm/hello$ cat Makefile
obj-m+=hello.o
#KDIR := /lib/modules/$(shell uname -r)/build/
KDIR := $(SDKTARGETSYSROOT)/usr/src/kernel/
all:
make -C $(KDIR) M=$(PWD) modules
clean:
make -C $(KDIR) M=$(PWD) clean
***********
Next I start the build process, by executing make and I get an error which I
can't fix:
datawatt@O-LINUX-1:~/workspace-lkm/hello$ make
make -C
/home/datawatt/toolchain/sysroots/armv7at2hf-neon-angstrom-linux-gnueabi/usr/src/kernel/
M=/home/datawatt/workspace-lkm/hello modules
make[1]: Entering directory
'/home/datawatt/toolchain/sysroots/armv7at2hf-neon-angstrom-linux-gnueabi/usr/src/kernel'
CC [M] /home/datawatt/workspace-lkm/hello/hello.o
/bin/sh: scripts/basic/fixdep: No such file or directory
scripts/Makefile.build:264: recipe for target
'/home/datawatt/workspace-lkm/hello/hello.o' failed
make[2]: *** [/home/datawatt/workspace-lkm/hello/hello.o] Error 1
Makefile:1387: recipe for target '_module_/home/datawatt/workspace-lkm/hello'
failed
make[1]: *** [_module_/home/datawatt/workspace-lkm/hello] Error 2
make[1]: Leaving directory
'/home/datawatt/toolchain/sysroots/armv7at2hf-neon-angstrom-linux-gnueabi/usr/src/kernel'
Makefile:8: recipe for target 'all' failed
make: *** [all] Error 2
Any help is appreciated.
Alberto Spin
--
_______________________________________________
yocto mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/yocto