All Projects → glinuz → hi3798mv100

glinuz / hi3798mv100

Licence: other
How to build linux kernel with HiSilicon hi3798 arm, and create ubuntu rootfs.

Programming Languages

c
50402 projects - #5 most used programming language
assembly
5116 projects
C++
36643 projects - #6 most used programming language
Makefile
30231 projects
Roff
2310 projects
RPC
45 projects

Projects that are alternatives of or similar to hi3798mv100

Unisimd Assembler
SIMD macro assembler unified for ARM, MIPS, PPC and x86
Stars: ✭ 63 (-39.42%)
Mutual labels:  armv7
Swift On Balena
Docker images for Swift on Raspberry Pi and other ARM devices from balena's base images.
Stars: ✭ 153 (+47.12%)
Mutual labels:  armv7
Iotwifi
Raspberry Pi (arm) wifi configuration container. Configure and control wifi connectivity with a JSON based REST api.
Stars: ✭ 236 (+126.92%)
Mutual labels:  armv7
Nwjs rpi
[NW.js port for Raspberry Pi] binary compiled for the ARMv6 used in Raspberry Pi (compatible with RPi 2 and RPi 3)
Stars: ✭ 91 (-12.5%)
Mutual labels:  armv7
Multi Arch Images
Support for multi-platform architecture Docker images using buildx.
Stars: ✭ 143 (+37.5%)
Mutual labels:  armv7
Arm Assembly Cheat
MOVED TO: https://github.com/cirosantilli/linux-kernel-module-cheat#userland-assembly SEE README. ARMv7 and ARMv8 assembly userland minimal examples tutorial. Runnable asserts on x86 hosts with QEMU user mode or natively on ARM targets. Nice GDB step debug setup. Tested on Ubuntu 18.04 host and Raspberry Pi 2 and 3 targets.
Stars: ✭ 159 (+52.88%)
Mutual labels:  armv7
Reverse Engineering
This repository contains some of the executables that I've cracked.
Stars: ✭ 29 (-72.12%)
Mutual labels:  armv7
openipc.github.io
Alternative IP Camera firmware from an open community, http://openipc.org site source code
Stars: ✭ 28 (-73.08%)
Mutual labels:  hisilicon
Pieman
Script for creating custom OS images for single-board computers
Stars: ✭ 149 (+43.27%)
Mutual labels:  armv7
Build Openssl Curl
Scripts to build OpenSSL, HTTP/2 (nghttp2) and cURL (libcurl) for MacOS, iOS and tvOS devices (x86_64, armv7, armv7s, arm64, arm64e). Now Supporting Apple Silicon, OpenSSL 1.1.1 with TLS 1.3 and Mac Catalyst builds.
Stars: ✭ 230 (+121.15%)
Mutual labels:  armv7
Nw.js Armv7 Binaries
NW.js ARMv7 binaries. Instructions for running and building the executable.
Stars: ✭ 92 (-11.54%)
Mutual labels:  armv7
Compute Engine
Highly optimized inference engine for Binarized Neural Networks
Stars: ✭ 138 (+32.69%)
Mutual labels:  armv7
Computelibrary
The Compute Library is a set of computer vision and machine learning functions optimised for both Arm CPUs and GPUs using SIMD technologies.
Stars: ✭ 2,123 (+1941.35%)
Mutual labels:  armv7
Docker Jdownloader
JDownloader 2 Docker Image (Multiarch) - Passed 40M Downloads
Stars: ✭ 85 (-18.27%)
Mutual labels:  armv7
lsp-dsp-lib
DSP library for signal processing
Stars: ✭ 37 (-64.42%)
Mutual labels:  armv7
Rsyocto
🤖 SoCFPGA: Open Source embedded Linux developed for Intel (ALTERA) SoC-FPGAs (Cyclone V & Arria 10)
Stars: ✭ 41 (-60.58%)
Mutual labels:  armv7
Synestiaos
The Synestia Operating System
Stars: ✭ 159 (+52.88%)
Mutual labels:  armv7
mini
OpenSource Mini IP camera streamer
Stars: ✭ 64 (-38.46%)
Mutual labels:  hisilicon
wrt-hisicam
OpenWrt based HiSilicon`s System-On-a-Chip ip camera firmware
Stars: ✭ 21 (-79.81%)
Mutual labels:  hisilicon
Run On Arch Action
A Github Action that executes jobs/commands on non-x86 cpu architectures (ARMv6, ARMv7, aarch64, s390x, ppc64le)
Stars: ✭ 165 (+58.65%)
Mutual labels:  armv7

Hi3798mv100 (Huawei ec6108v9 IPTV)Linux的编译 烧录 blog

本文记录了为华为机顶盒EC6108v9(海思Hi3798mv100芯片)编译内核、烧录uboot以及刷入Ubuntu 16.04 rootfs的过程。同时,恶补了一下uboot的相关知识。

基本环境

目标板:IPTV退役的华为机顶盒EC6108v9( hisilicon Hi3798mv100 2G 8G emmc) 编译环境:Ubuntu 16.04 32bit VM 海思linux内核:HiSTBLinux 适用于hi3798mv100 mv200 SDK: HiSTBLinuxV100R005C00SPC041B020

环境准备

git clone https://github.com/glinuz/hi3798mv100
#切换到工作目录
cd HiSTBLinuxV100R005C00SPC041B020  #$SDK_path
#安装需要的编译工具,可以使用SDK带的shell脚本,也可以自己安装
sh server_install.sh
#or
apt-get install gcc make gettext bison flex bc zlib1g-dev libncurses5-dev lzma
#拷贝SDK中预先定义的
cp configs/hi3798mv100/hi3798mdmo1g_hi3798mv100_cfg.mak ./cfg.mak

source ./env.sh  #SDK各种环境变量
#按需修改编译的配置
make menuconfig
make build -j4 2>&1  | tee -a buildlog.txt

制成功后,在out/hi3798mv100可以找到编译好的fastboot-burn.bin、bootargs.bin、hi_kernel.bin,分别是uboot引导文件、uboot引导参数配置和linux内核。

使用HiTool烧录到eMMC

TTL连接图见[hi3798mv100-ec6109.jpg],具体烧录方案可以搜索hitool教程。

hitool烧录界面配置建[hit00l-burn.png]

eMMC分区为uboot 1M、bootargs 1M、kernel 8M、rootfs 128M,具体见[emmc_partitions.xml].

如果修改分区大小,调整分区大小,需同步修改bootargs.txt 和 emmc_partitions.xml。

configs/hi3798mv100/prebuilts/bootargs.txt,并重新生成bootargs.bin文件

bootcmd=mmc read 0 0x1FFFFC0 0x1000 0x4000;bootm 0x1FFFFC0
bootargs=console=ttyAMA0,115200 root=/dev/mmcblk0p4 rootfstype=ext4 rootwait blkdevparts=mmcblk0:1M(fastboot),1M(bootargs),8M(kernel),128M(rootfs),-(system)

mkbootargs  -s 1M -r bootargs.txt  -o bootargs.bin

bootcmd操作说明:从第0个mmc设备块上2M字节处开始(0x1000的十进制4096,4096512/1024=2M),读取16×512个字节(0x4000的十进制16384512/1024=8M)到内存0x1FFFFC0处,并从此处引导。

打开串口console,以便进行调试。console=ttyAMA0,115200 uboot启动过程输出如下:

Bootrom start
Boot from eMMC
Starting fastboot ...

System startup
DDRS
Reg Version:  v1.1.0
Reg Time:     2016/1/18  14:01:18
Reg Name:     hi3798mdmo1g_hi3798mv100_ddr3_1gbyte_16bitx2_4layers_emmc.reg

Jump to DDR


Fastboot 3.3.0 (root@glinuz) (Jul 25 2020 - 08:25:47)

Fastboot:      Version 3.3.0
Build Date:    Jul 25 2020, 08:26:41
CPU:           Hi3798Mv100 
Boot Media:    eMMC
DDR Size:      1GB


MMC/SD controller initialization.
MMC/SD Card:
    MID:         0x15
    Read Block:  512 Bytes
    Write Block: 512 Bytes
    Chip Size:   7456M Bytes (High Capacity)
    Name:        "8GME4R"
    Chip Type:   MMC
    Version:     5.1
    Speed:       52000000Hz
    Mode:        DDR50
    Bus Width:   8bit
    Boot Addr:   0 Bytes
Net:   upWarning: failed to set MAC address


Boot Env on eMMC
    Env Offset:          0x00100000
    Env Size:            0x00010000
    Env Range:           0x00010000
ID_WORD have already been locked


SDK Version: HiSTBLinuxV100R005C00SPC041B020_20161028

Reserve Memory
    Start Addr:          0x3FFFE000
    Bound Addr:          0x8D24000
    Free  Addr:          0x3F8FC000
    Alloc Block:  Addr         Size
                  0x3FBFD000   0x400000
                  0x3F8FC000   0x300000

Press Ctrl+C to stop autoboot

MMC read: dev # 0, block # 4096, count 16384 ... 16384 blocks read: OK

84937034 Bytes/s
## Booting kernel from Legacy Image at 01ffffc0 ...
   Image Name:   Linux-3.18.24_s40
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    6959232 Bytes = 6.6 MiB
   Load Address: 02000000
   Entry Point:  02000000
   Verifying Checksum ... OK
   XIP Kernel Image ... OK
OK
ATAGS [0x00000100 - 0x00000300], 512Bytes

Starting kernel ...

高级编译

自定义linux内核

ARM平台内核配置文件采用defconfig格式,正确使用和保存deconfig的流程如下:

source/kernel/linux-3.18.y/arch/arm/configs/hi3798mv100_defconfig cd source/kernel/linux-3.18.y/ 可以使用本git库提供的hi3798mv100_defconfig-0812

  1. 先备份hi3798mv100_defconfig
  2. make ARCH=arm hi3798mv100_defconfig #从defconfig生成标准linux内核配置.config文件
  3. make ARCH=arm menuconfig #修改内核配置,并保存
  4. make ARCH=arm savedefconfig #重新生成defconfg文件
  5. cp defconfig arch/arm/configs/hi3798mv100_defconfig #复制defconfig文件到正确的位置。
  6. make distclean #清理之前编译生产的文件
  7. cd $SDK_path;make linux #重新编译kernel

需关注的kernel编译参数:

打开devtmpfs,/dev 文件系统

打开open by fhandle syscalls

打开cgroup功能

修改uboot

source/boot/fastboot/include/configs godbox.h
#define CONFIG_SHOW_MEMORY_LAYOUT 1
#define CONFIG_SHOW_REG_INFO      1
#define CONFIG_SHOW_RESERVE_MEM_LAYOUT        1

or
cd $SDK_path;make hiboot CONFIG_SHOW_RESERVE_MEM_LAYOUT='y'

CONFIG_SHOW_RESERVE_MEM_LAYOUT='y' 编译时,打开uboot启动时输出MEM信息开关

启动时修改uboot启动参数

在uboot启动阶段,Ctrl+C进入uboot模式

 setenv bootargs console=tty1 console=ttyAMA0,115200 root=/dev/mmcblk0p4 rootfstype=ext4 rootwait blkdevparts=mmcblk0:1M(fastboot),1M(bootargs),8M(kernel),128M(rootfs),-(system)  ipaddr=192.168.10.100 gateway=192.168.10.1 netmask=255.255.255.0 netdev=eth0
 saveenv
 reset

制作ubuntu rootfs

apt-get install binfmt-support debootstrap qemu qemu-user-static
cd;mkdir rootfs
debootstrap --arch=armhf --variant=minbase  --foreign --include=locales,util-linux,apt-utils,ifupdown,systemd-sysv,iproute2,curl,wget,expect,ca-certificates,openssh-server,isc-dhcp-client,vim-tiny,bzip2,cpio,usbutils,netbase,parted,jq,bc,crda,wireless-tools,iw stretch rootfs http://mirrors.ustc.edu.cn/debian/

cd rootfs
cp /usr/bin/qemu-arm-static usr/bin
mount -v --bind /dev dev
mount -vt devpts devpts dev/pts -o gid=5,mode=620
mount -t proc proc proc
mount -t sysfs sysfs sys
mount -t tmpfs tmpfs run
LC_ALL=C LANGUAGE=C LANG=C chroot . /debootstrap/debootstrap --second-stage
LC_ALL=C LANGUAGE=C LANG=C chroot . dpkg --configure -a

LC_ALL=C LANGUAGE=C LANG=C chroot . /bin/bash  #以下命令在chroot环境bash执行
mkdir /proc
mkdir /tmp
mkdir /sys
mkdir /root

mknod /dev/console c 5 1
mknod /dev/ttyAMA0 c 204 64
mknod /dev/ttyAMA1 c 204 65

mknod /dev/ttyS000 c 204 64
mknod /dev/null    c 1   3
mknod /dev/urandom   c 1   9
mknod /dev/zero    c 1   5
mknod /dev/random    c 1   8
mknod /dev/tty    c 5   0

echo "nameserver 114.114.114.114" > /etc/resolv.conf
echo "hi3798m" > /etc/hostname
echo "Asia/Shanghai" > /etc/timezone
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

echo "en_US.UTF-8 UTF-8" > etc/locale.gen
echo "zh_CN.UTF-8 UTF-8" >> etc/locale.gen
echo "zh_CN.GB2312 GB2312" >> etc/locale.gen
echo "zh_CN.GBK GBK" >> etc/locale.gen

locale-gen

echo "LANG=en_US.UTF-8" > /etc/locale.conf

echo "deb http://mirrors.ustc.edu.cn/debian/  stretch main contrib non-free" >  /etc/apt/sources.list

ln -s /lib/systemd/system/[email protected] /etc/systemd/system/getty.target.wants/[email protected]
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config

apt autoremove
apt-get autoclean
apt-get clean
apt clean

制作rootfs镜像

make_ext4fs -l 128M -s rootfs_128M.ext4 ./rootfs

参考资料

[1] https://wiki.ubuntu.com/ARM/RootfsFromScratch/QemuDebootstrap

[2] http://gnu-linux.org/building-ubuntu-rootfs-for-arm.html

刷机包-二进制文件

文件下载 release fastboot-bin.bin uboot分区包 bootargs.bin uboot参数分区包 hi_kernel.bin kernel分区包 rootfs_128m.ext root根分区包 emmc_partitions.xml 刷机分区配置文件 如调整分区大小,需要重新生成bootargs.bin 和调整分区配置文件。 使用华为hi-tool,emmc烧录

uboot说明

很多同学问uboot启动,有关主要uboot参数如下,emmc存储芯片

bootcmd=mmc read 0 0x1FFFFC0 0x1000 0x4000;bootm 0x1FFFFC0
bootargs=console=ttyAMA0,115200 root=/dev/mmcblk0p4 rootfstype=ext4 rootwait blkdevparts=mmcblk0:1M(fastboot),1M(bootargs),8M(kernel),128M(rootfs),-(system)

bootcmd uboot启动引导: mmc read addr blk 指令 内存地址 mmc内地址 长度 mmc read 0 0x1FFFFC0 0x1000 0x4000 bootm 0x1FFFFC0 #从内存地址引导内核

其他

后继又在debootstrap中加入了python golang docker等软件包,并调大rootfs到4GB,同时修改相应bootargs emmc_partition。

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].