Raspberry Pi 3运行64位kernel和应用程序

  1. 下载内核和文件系统

    内核
    https://github.com/raspberrypi/linux.git

    文件系统
    https://downloads.raspberrypi.org/raspbian_lite_latest

    linaro工具链
    https://releases.linaro.org/components/toolchain/binaries/latest/aarch64-linux-gnu/

  1. 编译内核

    make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcmrpi3_defconfig
    make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j4
    
  2. 制作文件系统

    stor@debian:~/raspberry$ sudo fdisk -l  2018-06-27-raspbian-stretch-lite.img
    Disk 2018-06-27-raspbian-stretch-lite.img: 1.8 GiB, 1862270976 bytes, 3637248 sectors
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x4d3ee428
    
    Device                                Boot Start     End Sectors  Size Id Type
    2018-06-27-raspbian-stretch-lite.img1       8192   96663   88472 43.2M  c W95 FAT32 (LBA)
    2018-06-27-raspbian-stretch-lite.img2      98304 3637247 3538944  1.7G 83 Linux
    
    

    从中可以看出以下信息:
    boot:
    offset = 8192*512 = 4194304
    sizelimit = 88472*512 = 45297664
    rootfs:
    offset = 98304*512=50331648

    sudo mount -o loop,offset=50331648 2018-06-27-raspbian-stretch-lite.img /mnt
    sudo mount -o loop,offset=4194304,sizelimit=45297664 2018-06-27-raspbian-stretch-lite.img /mnt/boot
    

    查看文件系统

    stor@debian:~/raspberry$ ls /mnt
    bin   debootstrap  etc   lib         media  opt   root  sbin  sys  usr
    boot  dev          home  lost+found  mnt    proc  run   srv   tmp  var
    stor@debian:~/raspberry$ ls /mnt/boot
    bcm2708-rpi-0-w.dtb       bcm2710-rpi-cm3.dtb  fixup_db.dat      overlays
    bcm2708-rpi-b.dtb         bootcode.bin         fixup_x.dat       start_cd.elf
    bcm2708-rpi-b-plus.dtb    cmdline.txt          issue.txt         start_db.elf
    bcm2708-rpi-cm.dtb        config.txt           kernel7.img       start.elf
    bcm2709-rpi-2-b.dtb       COPYING.linux        kernel.img        start_x.elf
    bcm2710-rpi-3-b.dtb       fixup_cd.dat         LICENCE.broadcom
    bcm2710-rpi-3-b-plus.dtb  fixup.dat            LICENSE.oracle
    

    复制内核文件到文件系统:

    sudo cp linux/arch/arm64/boot/Image /mnt/boot/kernel8.img
    sudo cp linux/arch/arm65/boot/dts/broadcom/bcm2710-rpi-3-b.dtb /mnt/boot/
    sudo make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/mnt modules_install
    

    修改启动配置

    echo kernel=kernel8.img >> /mnt/boot/config.txt
    
  1. 添加64位libc

    现在内核是64位的,但是文件系统里的文件都是32位的,不能直接运行动态链接的64位的程序,需要添加64位的libc库。

    复制库文件到/lib/aarch64-linux-gnu

    sudo cp -r /home/stor/tools/gcc-linaro-7.3.1-2018.05-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/lib /mnt/lib/aarch64-linux-gnu
    

    添加库文件到系统路径

    # add *.conf for aarch64-linux-gnu
    echo "/lib/aarch64-linux-gnu" > /mnt/etc/ld.so.conf.d/aarch64-linux-gnu.conf
    

    添加aarch64的ld软链接

    # make soft link for ld-linux-aarch64.so.1 at /lib
    ln -s aarch64-linux-gnu/ld-linux-aarch64.so.1 ld-linux-aarch64.so.1
    

    动态链接的程序,可以通过file或者readelf来看使用的链接器名,下面两种方式,查到的都是 /lib/ld-linux-aarch64.so.1:

    file方式:

    stor@debian:~/code_arm64$ file a.out 
    a.out: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=50648f691b80b656557874266b5b7e02de16b603, not stripped
    

    readelf方式:

    stor@debian:~/code_arm64$ aarch64-linux-gnu-readelf a.out -l
    
    Elf file type is EXEC (Executable file)
    Entry point 0x400460
    There are 8 program headers, starting at offset 64
    
    Program Headers:
      Type           Offset             VirtAddr           PhysAddr
                     FileSiz            MemSiz              Flags  Align
      PHDR           0x0000000000000040 0x0000000000400040 0x0000000000400040
                     0x00000000000001c0 0x00000000000001c0  R E    0x8
      INTERP         0x0000000000000200 0x0000000000400200 0x0000000000400200
                     0x000000000000001b 0x000000000000001b  R      0x1
    #这里可以看到链接器的名字
          [Requesting program interpreter: /lib/ld-linux-aarch64.so.1]
      LOAD           0x0000000000000000 0x0000000000400000 0x0000000000400000
                     0x0000000000000644 0x0000000000000644  R E    0x10000
      LOAD           0x0000000000000df8 0x0000000000410df8 0x0000000000410df8
      ...
    

    删除preload,否则会产生警告

    sudo rm /etc/ld.so.preload
    

    umount

    sudo umount /mnt/boot
    sudo umount /mnt
    

    文件系统修改好了,下面把文件系统烧到SD卡中,并启动树莓派

    运行树莓派之后,在树莓派的shell中重新生成ld.so.cache

    sudo ldconfig
    

    也可以把这个生成的ld.so.cache放到制作好的文件系统中,以后用这个文件系统就不用再生成了

    sudo scp pi@192.168.0.101:/etc/ld.so.cache /mnt/etc/ld.so.cache
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容