X4412开发板移植(linux-4.16.0)

news/2024/7/21 11:12:30 标签: kernel, port, X4412, rootfs

代码: git clone https://github.com/chasinglulu/linux.git -b X4412-Kernel


设备树文件

linux-4.16.0/arch/arm/boot/dts/exynos4412-x4412.dts

/*
 * X4412 board device tree source
 *
 * Device tree source file for 9tripod's X4412 board which is based on
 * Samsung's Exynos4412 SoC.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
*/

/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/pwm/pwm.h>
#include "exynos4412.dtsi"
#include "exynos4412-ppmu-common.dtsi"
#include "exynos-mfc-reserved-memory.dtsi"

/ {
    model = "X4412 board based on Exynos4412";
    compatible = "9tripod,X4412", "samsung,exynos4412", "samsung,exynos4";

    memory@40000000 {
        device_type = "memory";
        reg = <0x40000000 0x40000000>;
    };

    chosen {
        bootargs = "console=ttySAC3,115200";
        stdout-path = &serial_3;
    };

    firmware@0203F000 {
        compatible = "samsung,secure-firmware";
        reg = <0x0203F000 0x1000>;
    };

    fixed-rate-clocks {
        xxti {
            compatible = "samsung,clock-xxti";
            clock-frequency = <0>;
        };

        xusbxti {
            compatible = "samsung,clock-xusbxti";
            clock-frequency = <24000000>;
        };
    };

    leds {
        compatible = "gpio-leds";
        led1 {
            label = "led1:heart";
            gpios = <&gpx1 6 GPIO_ACTIVE_LOW>;
            default-state = "on";
            linux,default-trigger = "heartbeat";
        };

        led2 {
            label = "led2";
            gpios = <&gpx1 7 GPIO_ACTIVE_LOW>;
            default-state = "off";
        };

        led3 {
            label = "led3";
            gpios = <&gpx2 6 GPIO_ACTIVE_LOW>;
            default-state = "off";
        };

        led4 {
            label = "led4";
            gpios = <&gpx2 7 GPIO_ACTIVE_LOW>;
            default-state = "off";
            linux,default-trigger = "timer";
        };
    };

    gpio-keys {
        compatible = "gpio-keys";

        left {
            label = "Key Left";
            linux,code = <KEY_LEFT>;
            gpios = <&gpx1 0 GPIO_ACTIVE_LOW>;
        };

        right {
            label = "Key Right";
            linux,code = <KEY_RIGHT>;
            gpios = <&gpx1 1 GPIO_ACTIVE_LOW>;
        };

        vol-up {
            label = "Key Vol+";
            linux,code = <KEY_UP>;
            gpios = <&gpx1 2 GPIO_ACTIVE_LOW>;
        };

        vol-down {
            label = "Key Vol-";
            linux,code = <KEY_DOWN>;
            gpios = <&gpx1 3 GPIO_ACTIVE_LOW>;
        };
    };

    camera: camera {
        pinctrl-names = "default";
        pinctrl-0 = <&cam_port_a_clk_active>;
        status = "okay";
        assigned-clocks = <&clock CLK_MOUT_CAM0>;
        assigned-clock-parents = <&clock CLK_XUSBXTI>;
    };
};

&fimc_0 {
    status = "okay";
    assigned-clocks = <&clock CLK_MOUT_FIMC0>,
            <&clock CLK_SCLK_FIMC0>;
    assigned-clock-parents = <&clock CLK_MOUT_MPLL_USER_T>;
    assigned-clock-rates = <0>, <176000000>;
};

&fimc_1 {
    status = "okay";
    assigned-clocks = <&clock CLK_MOUT_FIMC1>,
            <&clock CLK_SCLK_FIMC1>;
    assigned-clock-parents = <&clock CLK_MOUT_MPLL_USER_T>;
    assigned-clock-rates = <0>, <176000000>;
};

&ehci {
    status = "okay";

    port@0 {
        status = "okay";
    };

    port@1 {
        status = "okay";
    };

    port@2 {
        status = "okay";
    };
};

&pwm {
    status = "okay";
    pinctrl-0 = <&pwm1_out>;
    pinctrl-names = "default";
    samsung,pwm-outputs = <1>;
};

&i2c_2 {
    status = "okay";
};

&i2c_8 {
    status = "okay";
};

&exynos_usbphy {
    status = "okay";
};

&hsotg {
    dr_mode = "peripheral";
    status="okay";
};

&mshc_0 {
    pinctrl-0 = <&sd4_clk &sd4_cmd &sd4_bus4 &sd4_bus8>;
    pinctrl-names = "default";
    status = "okay";

    cd-gpio= <&gpk0 2 GPIO_ACTIVE_HIGH>;
    clock-frequency = <400000000>;
    samsung,dw-mshc-ciu-div = <0>;
    samsung,dw-mshc-sdr-timing = <2 3>;
    samsung,dw-mshc-ddr-timing = <1 2>;
    bus-width = <8>;
    cap-mmc-highspeed;
};

&sdhci_2 {
    bus-width = <4>;
    pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_cd &sd2_bus4>;
    pinctrl-names = "default";
    cd-gpios = <&gpk2 2 GPIO_ACTIVE_HIGH>;
    cd-inverted;
    card-detect-delay = <200>;
    cap-sd-highspeed;
    status = "okay";
};

&serial_0 {
    status = "okay";
};

&serial_1 {
    status = "okay";
};

&serial_2 {
    status = "okay";
};

&serial_3 {
    status = "okay";
};

&pinctrl_0 {
    hsic_reset: hsic-reset {
        samsung,pins = "gpc0-0";
        samsung,pin-function = <EXYNOS_PIN_FUNC_INPUT>;
        Samsung,pin-pud = <EXYNOS_PIN_PULL_NONE>;
        samsung,pin-drv = <EXYNOS4_PIN_DRV_LV4>;
    };
};

配置与编译

make ARCH=arm exynos_defconfig
make ARCH=arm ACROSS_COMPILE=arm-linux-gnueabihf- -j8
cat linux-4.16.0/arch/arm/boot/zImage linux-4.16.0/arch/arm/boot/dts/exynos4412-x4412.dtb > zImage_dtb

根文件系统

使用ubuntu-base构建根文件系统,这样能快速构建一个比较完善的文件系统。

1 Install Tools

sudo apt-get install qemu-user-static binfmt-support

2 get ubuntu-base

wget http://cdimage.ubuntu.com/ubuntu-base/releases/18.04/release/ubuntu-base-18.04-base-armhf.tar.gz

rootfs">3 create rootfs

mkdir ubuntu-18.04
sudo tar -xzf ubuntu-base-18.04-base-armhf.tar.gz -C ubuntu-18.04

当执行chroot时,会调用arm架构的/bin/bash程序,这时需要借助qemu-arm-static模拟执行这个程序

sudo cp /usr/bin/qemu-arm-static ubuntu-18.04/usr/bin/

将宿主机的DNS配置复制到目标机的根文件系统中,用于后面工具的下载

sudo cp /etc/resolv.conf rootfs/etc/resolv.conf

安装内核modules

cd linux-4.16.0
sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mudules_install INSTALL_MOD_PATH=/path/to/ubuntu-18.04/

挂载必要文件系统

sudo mount -t proc /proc ubuntu-18.04/proc
sudo mount -t sysfs /sys ubuntu-18.04/sys
sudo mount -o bind /dev ubuntu-18.04/dev
sudo mount -o bind /dev/pts ubuntu-18.04/dev/pts
sudo chroot ubuntu-18.04

安装基本软件

apt-get sudo vim bash-completion net-tools ethtool wireless-tools ifupdown network-manager iputils-ping resolvconf udev  make gcc

添加用户

adduser ubuntu
addgroup ubuntu adm
addgroup ubuntu sudo 
addgroup ubuntu audio
addgroup ubuntu video
addgroup ubuntu dialout

设置主机名称

echo "X4412" >/etc/hostname
echo "127.0.0.1 localhost" >/etc/hosts
echo "127.0.0.1 X4412" >>/etc/hosts

rootfs">4 package rootfs

exit
sudo umount ubuntu-18.04/proc
sudo umount ubuntu-18.04/sys
sudo umount ubuntu-18.04/dev/pts
sudo umount ubuntu-18.04/dev

cd ubuntu-18.04
sudo tar -cjf ../ubuntu-rootfs.18.04.tar.bz2 .

烧写

制作SD启动卡更新X4412开发板上的映像,参考开发板使用手册

结果

这里写图片描述

现在DM9000C以太网卡驱动不能正确适配,重启后usb不能识别外接设备,camera驱动也不能适配

参考

  1. http://gnu-linux.org/building-ubuntu-rootfs-for-arm.html
  2. http://blog.csdn.net/mountzf/article/details/51707853

http://www.niftyadmin.cn/n/978249.html

相关文章

磁盘阵列介绍、进程的查看管理、日志文件的查看分析,systemctl的控制

RAID磁盘阵列 • 廉价冗余磁盘阵列 – Redundant Arrays of Inexpensive Disks – 通过硬件/软件技术,将多个较小/低速的磁盘整合成一 个大磁盘 – 阵列的价值:提升I/O效率、硬件级别的数据冗余 – 不同RAID级别的功能、特性各不相同 • RAID 0,条带模式 – 同一个文档分散存放…

【BZOJ4712】洪水 树链剖分优化DP+线段树

【BZOJ4712】洪水 Description 小A走到一个山脚下&#xff0c;准备给自己造一个小屋。这时候&#xff0c;小A的朋友&#xff08;op&#xff0c;又叫管理员&#xff09;打开了创造模式&#xff0c;然后飞到山顶放了格水。于是小A面前出现了一个瀑布。作为平民的小A只好老实巴交地…

转:ios review推送与执行

http://mp.weixin.qq.com/s?__bizMzA4ODk0NjY4NA&mid409082578&idx1&sn2ca1e453d3c21caa39238c23f230e1ba&scene1&srcid111170H3FysGT6jAukAc4ZsQ#rd 关于作者 原文链接 : http://blog.csdn.net/uxyheaven/article/details/49773619 特邀作者&#xff1a;…

delphi 操作文件

var F: Text; //TextFile 和 Text 是一样的 ---------------------------------- filename : ExtractFilePath(Application.ExeName) 院感病历导入记录.txt; if FileExists(filename) then begin AssignFile(F,FileName); Append(F); //打开准备追加 …

实战 用java 代码下载Samba服务器上的文件到本地目录以及上传本地文件到Samba服务器...

引入&#xff1a; 在我们昨天架设好了Samba服务器上并且创建了一个 Samba 账户后&#xff0c;我们就迫不及待的想用JAVA去操作Samba服务器了&#xff0c;我们找到了一个框架叫 jcifs&#xff0c;可以高效的完成我们工作。 实践&#xff1a; 对samba服务器上的操作无外乎2种&…

per-CPU(未完待续)

简介 per-CPU变量是内核的一个重要机制&#xff0c;正如名称所示&#xff0c;per-CPU变量为每个cpu单独提供内存空间&#xff0c;每个cpu只访问修改各自的空间一个per-CPU变量所需要的内存大小为&#xff1a;变量类型大小乘以cpu数量&#xff0c;即sizeof(type) x (number of …

ASP.NET Redis 开发

Redis简介 Redis是一个开源的&#xff0c;使用C语言编写&#xff0c;面向“键/值”对类型数据的分布式NoSQL数据库系统&#xff0c;特点是高性能&#xff0c;持久存储&#xff0c;适应高并发的应用场景。Redis纯粹为应用而产生&#xff0c;它是一个高性能的key-value数据库,并且…

【?】【7007】栈、模拟

Time Limit: 10 second Memory Limit: 2 MB 问题描述 对一个只含单个大写英文字母&#xff0c;””&#xff0c;”-“&#xff0c;”(“和”)”的表达式&#xff0c;其中单个大写英文字母表示变量&#xff0c;进行如下处理&#xff1a;去掉表达式中的全部括号&#xff0c;并对…