helpera64下helloworld模块
一、helloworld.ko
#include<linux/init.h>
#include<linux/module.h>
static int hello_init(void)
{
printk(KERN_ALERT "szbaijie hello init\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "szbaijie hello exit\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_AUTHOR("baijie");
MODULE_LICENSE("GPL");
二、出现问题
当出先下面错误时候,查找问题,命令dmesg |tail查看下打印LOG。
查出来是Make的时候默认为PC-X86的编译器,所以我们需要切换为arm编译器来交叉编译。
三、切换为arm交叉编译环境
1、修改bash.bashrc
方法一:修改~/.bashrc文件(此文件只对当前用户适用),命令如下:
sudo vi ~/.bashrc
在文件最后加入:
export PATH=~/helpera64/lichee/out/external-toolchain/gcc-aarch64/bin:$PATH
2、修改profile
方法二:修改/etc/profile文件(此文件属于系统级别的环境变量,设置在里面的东西对所有用户适用):
sudo vi /etc/profile
export PATH=~/helpera64/lichee/out/external-toolchain/gcc-aarch64/bin:$PATH
3、立即使能环境变量(不用重启):
对应方法一:
source /root/.bashrc
对应方法二:
source /etc/profile
4、测试是否安装成功
aarch64-linux-gnu-gcc -v
最后,交叉编译器环境增加成功。
5、直接编译内核和模块(不使用Makefile):
交叉编译内核:
make -C ~/helpera64/lichee/linux-3.10/ ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
交叉编译编译模块:
make -C ~/home/helpera64/lichee/linux-3.10/ M=$PWD modules ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
如下图:
四、重新设计的Makefile
KERNELDIR :=~/lichee/linux-3.10/
ARCH :=arm64
CROSS_COMPILE :=aarch64-linux-gnu-
PWD :=$(shell pwd)
obj-m :=helloworld.o
default:
$(MAKE) -C $(KERNELDIR) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) M=$(PWD) modules
clean:
rm *.o *.ko *.mod.c *.order *.symvers .* -rf
五、测试结果
1、开启ssh:将网络打开ifconfig eth0 up,之后执行下面命令来启动ssh。
/etc/init.d/S50sshd restart
然后使用udhcpc来打开网络,如下图。
然后将helloworld.ko远程拷贝到helpera64开发板上。
2、测试结果