这里我替换的是原本为sys_ni_syscall的0×900000+223号系统调用,
这是因为223号是内核默认未使用的(/*Demo_liu*/)


修改arch/arm/kernel/目录下的Make?le文件,在obj-y后面添加mysyscall.o,


不需要的 跳过这些
/*****************************************************************************/
下面内核编译开始
make ARCH=arm CROSS_COMPILE=../RpiTools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi- -j4
-j4 开启线程编译 加快编译速度

大概 30分钟

编译结束
查看一下
zImage 就是我们所编译获得的文件。zImage 是 Compressed kernel image 文件,要转换为 kernel.img 还需要进一步处理。
cd ../RpiTools/mkimage/
./imagetool-uncompressed.py ../../RpiLinux/arch/arm/boot/zImage
可以看到当前目录中多了kenrel.img文件
新的Kernel要正确运行,还需要编译所需的module,主要对应"/lib"目录下的内容。编译时,使用"INSTALL_MOD_PATH"参数指定目标路径。
cd ../..
mkdir modules
cd RpiLinux/
make modules_install ARCH=arm CROSS_COMPILE=../RpiTools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi- INSTALL_MOD_PATH=../modules



树莓派断电 把内存卡 插到Ubuntu 的电脑上
挂载 SD卡
先看一下 文件系统
df –h
sudo mkdir /media/agu/SD
sudo mount /dev/sdb2 /media/agu/SD/
sudo umount /media/agu/SD

备份 Firmware
升级RPi的kernel、Firmware、lib
cd ..
mkdir backup
sudo mount /dev/sdb1 /media/agu/SD/
cd /media/agu/SD/
mv *.elf *.bin /home/liu/rpi/backup/
sudo cp /home/liu/rpi/RpiTools/mkimage/kernel.img kernel_new.img
cd /home/liu/rpi/RPiFirameware/boot
cp bootcode.bin fixup.dat fixup_cd.dat start.elf /media/agu/SD/
cd ../hardfp/opt/
sudo umount /media/agu/SD
sudo mount /dev/sdb2 /media/agu/SD/
将挂载点换成SD卡的第2分区,即"/"分区。
sudo cp -r vc/ /media/agu/SD/opt/
将新的vc库复制到SD卡,因为之前选用的工具链是hardfp(硬浮点),所以现在所选用的vc库也是硬浮点的版本(RPiFramware/hardfp/opt/vc)。树莓派ip
cd ../../..
sudo cp -r modules/lib /media/agu/SD/

下面修改一下 kernel_new. 的 文件名 替换一下

插到树莓派 运行 看看 内核 版本

自此内核编译成功。
下面我们看一下 刚才插入的 调用
编写测试程序调用新的系统调用:


看到调用成功 我测试了两次 所以有两个
顺便在Ubuntu 上 编译个模块 试试
写一个最简单的内核模块 hello.c, 这个内核只会在加载的时候输出 helo,word,移除时输出goodbye
在树梅派上找个地方新建一个目录,创建文件hello.c:


创建Makefile文件:

编译:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-77760-2.html
弱弱问一下
好喜欢
羞辱中国