交叉编译Raspberry Pi 内核记

Raspberry Pi 内核编译记


前言

       手中的红色树莓派已经买来许久,但还没怎么玩。最近想学习内核的知识,所以开始拿出手中的Pi。从内核编译开始,于是有了这篇文章。内核的编译主要参考这篇博客古作坊官方教程。下面是根据回忆记录,有错误请指出。

准备工作

      1.确定你手中已经有了张烧好系统的SD卡(我烧的是wheezy-raspbian)
         2.不可缺少的工具:git
         3.一条网线,一台路由(ssh登录)或是USB转串口器和杜邦线。

开始内核编译

 1.获取linux内核代码和工具包

打开termial,mkdir git-version,然后分别用git clone
$ git clone git://github.com/raspberrypi/firmware.git firmware
$ git clone git://github.com/raspberrypi/linux.git linux
$ git clone git://github.com/raspberrypi/tools.git tool

2.获取raspberry Pi中的.config文件
用ssh或是串口的方式登录到你raspberry pi中,
假如是ssh,把你pi中的/proc/config.gz到PC中
raspberry-pi $ scp pi@192.168.1.102:/proc/config.gz
假如使用串口,raspberry pi是没有装rz和sz命令的。所以要先在raspberry pi中先安装lrzsz.这样才能使用rz命令上文件

在PC中,将.configz移到用git拉下来的linux目录中:
izobs$ gunzip config.gz
izobs$ mv config .config
izobs$ cp .config ../linux
接下来:

 
izobs$ make ARCH=arm CROSS_COMPILE=../tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi- oldconfig
izobs$ make ARCH=arm CROSS_COMPILE=../tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi- menuconfig
配置完自己想要的模块,接下来就是编译了。
izobs$ make ARCH=arm CROSS_COMPILE=../tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi- -j4
等待编译完成后,将zImage 打包成kernel.img
izobs$ cd git-version/tool/mkimage
izobs$ ./imagetool-uncompressed.py ../../linux/arch/arm/boot/zImage
在mkimage目录下着会生成kernel.img啦!

接下来需要编译新的moudle和lib,
izobs$ cd ../git-version
izobs$ mkdir modules
izobs$ cd git-verison/linux
izobs$ make modules_install ARCH=arm CROSS_COMPILE=../tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi- INSTALL_MOD_PATH=../modules
到此,编译工作完成,下面进行新内核的安装。

安装新内核和升级Firmware,lib

将装有旧系统的SD卡插到你的PC中,打开termial:$ df -h:
文件系统        容量  已用  可用 已用% 挂载点
/dev/sda6        19G   11G  7.6G   58% /
none            4.0K     0  4.0K    0% /sys/fs/cgroup
udev            1.9G  4.0K  1.9G    1% /dev
tmpfs           376M  948K  375M    1% /run
none            5.0M     0  5.0M    0% /run/lock
none            1.9G  3.0M  1.9G    1% /run/shm
none            100M   16K  100M    1% /run/user
/dev/sda8        45G   39G  4.0G   91% /home
/dev/sda4       9.1G  7.5G  1.6G   83% /media/izobs/zob
/dev/sda3        21G   19G  2.5G   89% /media/izobs/zob2
/dev/sda1        51G   37G   14G   73% /media/izobs/26608333608308AF
/dev/sda5       140G  126G   14G   91% /media/izobs/软件
/dev/mmcblk0p1   56M   18M   39M   31% /media/izobs/boot
/dev/mmcblk0p2  7.3G  1.8G  5.2G   26% /media/izobs/41cd5baa-7a62-4706-b8e8-02c43ccee8d9
假如你的linux系统能自动挂载的话,df -h后,你将看到上面的东东。如果不能自动挂载,则手动
挂载这后面的两个盘吧。

/dev/mmcblk0p1 里是/boot的内容,
izobs-HP# cd /media/izobs/boot 
izobs-HP# ls
bootcode.bin  fixup_cd.dat  issue.txt		  kernel_new.img
cmdline.txt   fixup.dat     kernel_emergency.img  start.elf
config.txt    fixup_x.dat   kernel.img
izobs-HP# 

将里面的*bin *elf移除或备份
izobs$ mv *.elf *.bin

将前面编译把的kernel.im 改名成kernel_new.img移到此处, vim config.txt(这里等号处不能有空格 = =!不然启动不了) :
+kernel=kernel_new.img
# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1

# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
#disable_overscan=1

# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16
建用git拉下来的firmware中的   bootcode.bin fixup.dat fixup_cd.dat start.elf复制到此处
izobs$ cp /home/izobs/workspace/Ra-Pi/git-version/firmware/boot bootcode.bin fixup.dat fixup_cd.dat start.elf

进入/dev/mmcblk0p2的挂载点,将我们前面编译好的moudles目录的lib复制到这挂载点的lib目录中,还有将新的vc库复制到opt/vc中(framware/hardfp/opt/vc)。
将SD插回去,上电,uname -a。Pi是否有了新心脏了呢?

SSH外记

 用ssh登录SSH的前提是要知道Pi的密码,没有屏幕真的没法看。于是每次都要去路由看= =!

在网上收到有人用email的方式来将pi的ip发送出去。在简单了解python的email发送后,写了个脚本。

 git clone https://github.com/iZobs/Email_IP_raspberryPi.git



从github.com/raspberrypi/tools完整下载的主分支,直接git太慢还容易失败,特意分享出来,实测在Ubuntu 18上安装x64工具链可用,gcc版本:4.8.3. 文件300M+,不能上传大于220M的,尝试过解压后分卷,会导致安装有问题,所以直接发一个链接,大家去那里下吧。 文件信息: └─tools-master ├─arm-bcm2708 │ ├─arm-bcm2708-linux-gnueabi │ │ ├─arm-bcm2708-linux-gnueabi │ │ │ ├─bin │ │ │ ├─debug-root │ │ │ │ └─usr │ │ │ │ └─bin │ │ │ ├─include │ │ │ │ └─c++ │ │ │ │ └─4.7.1 │ │ │ │ ├─arm-bcm2708-linux-gnueabi │ │ │ │ │ └─bits │ │ │ │ ├─backward │ │ │ │ ├─bits │ │ │ │ ├─debug │ │ │ │ ├─decimal │ │ │ │ ├─ext │ │ │ │ │ └─pb_ds │ │ │ │ │ └─detail │ │ │ │ │ ├─binary_heap_ │ │ │ │ │ ├─binomial_heap_ │ │ │ │ │ ├─binomial_heap_base_ │ │ │ │ │ ├─bin_search_tree_ │ │ │ │ │ ├─branch_policy │ │ │ │ │ ├─cc_hash_table_map_ │ │ │ │ │ ├─eq_fn │ │ │ │ │ ├─gp_hash_table_map_ │ │ │ │ │ ├─hash_fn │ │ │ │ │ ├─left_child_next_sibling_heap_ │ │ │ │ │ ├─list_update_map_ │ │ │ │ │ ├─list_update_policy │ │ │ │ │ ├─ov_tree_map_ │ │ │ │ │ ├─pairing_heap_ │ │ │ │ │ ├─pat_trie_ │ │ │ │ │ ├─rb_tree_map_ │ │ │ │ │ ├─rc_binomial_heap_ │ │ │ │ │ ├─resize_policy │ │ │ │ │ ├─splay_tree_ │ │ │ │ │ ├─thin_heap_ │ │ │ │ │ ├─tree_policy │ │ │ │ │ ├─trie_policy │ │ │ │ │ └─unordered_iterator │ │ │ │ ├─profile │ │ │ │ │ └─impl │ │ │ │ ├─tr1 │ │ │ │ └─tr2 │ │ │ └─sysroot │ │ │ ├─etc │ │ │ ├─lib │ │ │ ├─sbin │ │ │ └─usr │ │ │ ├─bin │ │ │ ├─include │ │ │ │ ├─arpa │ │ │ │ ├─asm │ │ │ │ ├─asm-generic │ │ │ │ ├─bits │ │ │ │ ├─drm │ │ │ │ ├─gnu │ │ │ │ ├─linux │ │ │ │ │ ├─byteorder │ │ │ │ │ ├─caif │ │ │ │ │ ├─can │ │ │ │ │ ├─dvb │ │ │ │ │ ├─hdlc │ │ │ │ │ ├─isdn │ │ │ │ │ ├─mmc │ │ │ │ │ ├─netfilter │ │ │ │ │ │ └─ipset │ │ │ │ │ ├─netfilter_arp │ │ │ │ │ ├─netfilter_bridge │ │ │ │ │ ├─netfilter_ipv4 │ │ │ │ │ ├─netfilter_ipv6 │ │ │ │ │ ├─nfsd │ │ │ │ │ ├─raid │ │ │ │ │ ├─spi │ │ │ │ │ ├─sunrpc │ │ │ │ │ ├─tc_act │ │ │ │ │ ├─tc_ematch │ │ │ │ │ ├─usb │ │ │ │ │ └─wimax │ │ │ │ ├─mtd │ │ │ │ ├─net │ │ │ │ ├─netash │ │ │ │ ├─netatalk │ │ │ │ ├─netax25 │ │ │ │ ├─neteconet │ │ │ │ ├─netinet │ │ │ │ ├─netipx │ │ │ │ ├─netiucv │ │ │ │ ├─netpacket │ │ │ │ ├─netrom │ │ │ │ ├─netrose │ │ │ │ ├─nfs │ │ │ │ ├─protocols │ │ │ │ ├─rdma │ │ │ │ ├─rpc │ │ │ │ ├─rpcsvc │ │ │ │ ├─scsi │ │ │ │ │ └─fc │ │ │ │ ├─sound │ │ │ │ ├─sys │ │ │ │ ├─video │ │ │ │ └─xen │ │ │ ├─lib │ │ │ │ └─gconv │ │ │ ├─libexec │ │ │ ├─sbin │ │ │ └─share │ │ │ ├─i18n │ │ │ │ ├─charmaps │ │ │ │ └─locales │ │ │ └─locale │ │ │ ├─be │ │ │ │ └─LC_MESSAGES │ │ │ ├─bg │ │ │ │ └─LC_MESSAGES │ │ │ ├─ca │ │ │ │ └─LC_MESSAGES │ │ │ ├─cs │ │ │ │ └─LC_MESSAGES │ │ │ ├─da │ │ │ │ └─LC_MESSAGES │ │ │ ├─de │ │ │ │ └─LC_MESSAGES │ │ │ ├─el │ │ │ │ └─LC_MESSAGES │ │ │ ├─en_GB │ │ │ │ └─LC_MESSAGES │ │ │ ├─es │ │ │ │ └─LC_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值