移植Linux-5.4+内核到4412开发板

本文详细介绍了如何将Linux-5.4内核移植到4412开发板的过程,包括环境配置、内核配置、设备树修改和启动测试。通过修改配置文件,适配开发板硬件特性,并调整设备树以匹配实际参数,最终成功编译并测试了内核。
摘要由CSDN通过智能技术生成

移植Linux-5.4+内核到4412开发板

原创

书白

人机界面

06/24 12:01

阅读数 73

大咖揭秘Java人都栽在了哪?点击免费领取《大厂面试清单》,攻克面试难关~>>>

前言
ITOP-4412开发板被Linux官方支持,所以我们在4412上学习新的内核是非常方便的,本文作者是4412精英群8群一位技术高手,接下来,我们一起来欣赏下他的表演。
环境说明
OS版本
Ubuntu 20 LTS


交叉编译环境配置
~$ sudo apt install gcc-arm-linux-gnueabihf
~$ sudo apt install flex
~$ sudo apt install bison
~$ sudo apt install u-boot-tools
目标开发板
CPU (Exynos4412,四核Cortex-A9,主频为1.4GHz-1.6GHz)
RAM (1GB 双通道 DDR3)
ROM (8GB EMMC)
其他请见官网链接
1. 下载源码
~$ git clone https://github.com/jason416/linux.gi
Note:移植好的源码见博主github仓库的iTop4412分支。
2. 配置内核
2.1 进入内核源码目录
~/linux-5.4$ ls
arch   COPYING  Documentation  include  Kbuild   lib          Makefile  README   security  usr
block  CREDITS  drivers        init     Kconfig  LICENSES     mm        samples  sound     virt
certs  crypto   fs             ipc      kernel   MAINTAINERS  net       scripts  tools
jason@jason-vm2:~/arm-develop/linux$
2.2 修改内核配置
说明:
Note: 官方提供了所有三星系列的默认配置,需要先生成一个exynos的配置为基础,再上面再修改成跟板子一致的配置选项即可。
为了避免每次都需要指定ARCH和CROSS_COMPILE变量,可以直接在顶层Makefile直接指定好,如下所示:


选择系统类型
System Type  --->
      
  • Samsung EXYNOS  --->
            --- Samsung EXYNOS
            []   SAMSUNG EXYNOS3
            
  •    SAMSUNG EXYNOS4
            []   SAMSUNG EXYNOS5
                *** EXYNOS SoCs ***                                                        
              -*-   SAMSUNG EXYNOS4210                                                        
             
  •    SAMSUNG EXYNOS4412

    配置调试串口 - 设置为UART2
      Kernel hacking  --->
          
  • Kernel low-level debugging functions (read help!)
            Kernel low-level debugging port (Use Samsung S3C UART 2 for low-level debug)  --->
    开启串口调试驱动
    Device Drivers  --->
          Character devices  --->
            Serial drivers  --->
              <*> Samsung SoC serial support
             
  •    Samsung SoC serial debug
             
  •    Support for console on Samsung SoC serial port
    开启DM96XX网卡驱动
        Device Drivers  --->
          
  • Network device support  --->
            <*>   USB Network Adapters  --->
              <*>     Davicom DM96xx based USB 10/100 ethernet devices
    设置内核压缩模式为LZMA(非必须,可减小文件大小)
        General setup  --->
          ()  Build ID Salt
              Kernel compression mode (LZMA)  --->
    编译内核
    ~/linux-5.4$ make uImage LOADADDR=0x40008000 -j$(nproc)
    ...
      OBJCOPY arch/arm/boot/zImage
      Kernel: arch/arm/boot/zImage is ready
      UIMAGE  arch/arm/boot/uImage
    Image Name:   Linux-5.4.47
    Created:      Sun Jun 21 22:41:40 2020
    Image Type:   ARM Linux Kernel Image (uncompressed)
    Data Size:    5337464 Bytes = 5212.37 KiB = 5.09 MiB
    Load Address: 40008000
    Entry Point:  40008000
      Kernel: arch/arm/boot/uImage is ready
          这里需要指定LOADADDR变量,才能生成正确的uImage文件。因为在uboot启动内核时,会先解析uImage中的前64B头信息,定义如下:

     

    3. 修改设备树(以适配开发板)
    3.1 说明
    在前面的步骤完成后,已经能够编译出可以运行的内核了,但是最后还需要根据板子的差异性,对设备树文件进行调整,以适配目标板。
    3.2 修改
    屏蔽掉firmware节点(安全相关,不启用,也不知道怎么用…)
    修改bus_dmc 节点devfreq-events为devfreq-event
    修改regulators 节点参数(参考原理图中的参数)
    修改如下:
    --- a/arch/arm/boot/dts/exynos4412-itop-scp-core.dtsi
    +++ b/arch/arm/boot/dts/exynos4412-itop-scp-core.dtsi
    @@ -23,10 +23,12 @@
         reg = <0x40000000 0x40000000>;
       };
    +#if 0
       firmware@203f000 {
         compatible = "samsung,secure-firmware";
         reg = <0x0203F000 0x1000>;
       };
    +#endif
       fixed-rate-clocks {
         xxti {
    @@ -70,7 +72,7 @@
    };
    &bus_dmc {
    -  devfreq-events = <&ppmu_dmc0_3>, <&ppmu_dmc1_3>;
    +  devfreq-event = <&ppmu_dmc0_3>, <&ppmu_dmc1_3>;
       vdd-supply = <&buck1_reg>;
       status = "okay";
    };
    @@ -167,8 +169,8 @@
         regulators {
           ldo1_reg: LDO1 {
             regulator-name = "VDD_ALIVE";
    -        regulator-min-microvolt = <1100000>;
    -        regulator-max-microvolt = <1100000>;
    +        regulator-min-microvolt = <1000000>;
    +        regulator-max-microvolt = <1000000>;
             regulator-always-on;
             regulator-boot-on;
             op_mode = <1>; /* Normal Mode */
    @@ -230,8 +232,8 @@
           ldo9_reg: LDO9 {
             regulator-name = "VDD33_LCD";
    -        regulator-min-microvolt = <3300000>;
    -        regulator-max-microvolt = <3300000>;
    +        regulator-min-microvolt = <3000000>;
    +        regulator-max-microvolt = <3000000>;
             op_mode = <1>; /* Normal Mode */
           };
    @@ -252,8 +254,8 @@
           ldo12_reg: LDO12 {
             regulator-name = "VDD33_UOTG";
    -        regulator-min-microvolt = <3300000>;
    -        regulator-max-microvolt = <3300000>;
    +        regulator-min-microvolt = <3000000>;
    +        regulator-max-microvolt = <3000000>;
             regulator-always-on;
             op_mode = <1>; /* Normal Mode */
           };
    @@ -300,8 +302,8 @@
           /* Used by HSIC */
           ldo18_reg: LDO18 {
             regulator-name = "VDDIOPERI_28";
    -        regulator-min-microvolt = <3300000>;
    -        regulator-max-microvolt = <3300000>;
    +        regulator-min-microvolt = <2800000>;
    +        regulator-max-microvolt = <2800000>;
             regulator-always-on;
             op_mode = <1>; /* Normal Mode */
           };
    @@ -313,15 +315,15 @@
           ldo20_reg: LDO20 {
             regulator-name = "VDD28_CAM";
    -        regulator-min-microvolt = <1800000>;
    -        regulator-max-microvolt = <2800000>;
    +        regulator-min-microvolt = <3000000>;
    +        regulator-max-microvolt = <3000000>;
             op_mode = <1>; /* Normal Mode */
           };
           ldo21_reg: LDO21 {
             regulator-name = "VDD28_AF";
    -        regulator-min-microvolt = <1800000>;
    -        regulator-max-microvolt = <2800000>;
    +        regulator-min-microvolt = <3000000>;
    +        regulator-max-microvolt = <3000000>;
             op_mode = <1>; /* Normal Mode */
           };
    @@ -341,8 +343,8 @@
           ldo24_reg: LDO24 {
             regulator-name = "VDD33_A31";
    -        regulator-min-microvolt = <3300000>;
    -        regulator-max-microvolt = <3300000>;
    +        regulator-min-microvolt = <3000000>;
    +        regulator-max-microvolt = <3000000>;
             op_mode = <1>; /* Normal Mode */
           };
    @@ -430,8 +432,8 @@
           buck7_reg: BUCK7 {
             regulator-name = "pvdd_buck7";
    -        regulator-min-microvolt = <750000>;
    -        regulator-max-microvolt = <2000000>;
    +        regulator-min-microvolt = <2050000>;
    +        regulator-max-microvolt = <2050000>;
             regulator-boot-on;
             regulator-always-on;
             op_mode = <1>; /* Normal Mode */
    3.3 编译dts
    ~/linux-5.4$ make dtbs
    4. 启动测试
    根据另一个专题《Uboot-2017-11移植DM9621网卡专题》移植的支持网络功能的uboot,和移植的ubuntu-base-20.04-base-armhf文件系统(下篇文章更新移植方法),可以直接tftp测试内核,效果如下:



    到这一步,移植工作就完成了,是不是觉得很容易呢~


    更多内容关注公众号噢:

    weixin.jpg

     

1.2 产品简介 UT-Exynos4412开发板是一款功能极为强大的高端ARM Coretex-A9开发平台,采用Samsung最新的Exynos4412(Exynos4412 Quad),主频达到1.4~1.6GHz;Exynos4412的主要特性为:QuadCore、WXGAresolution、1080pHDTVdisplay throughoutHDMI、I2Ssupports、USBHost&Device2;.0、HSICinterface、LPDDR2PackageonPackage、Chip2Chip等;内建32/32KB数据/指令一级缓存,1MB的二级缓存;GPU采用的是Mali 400MP四核心图形处理器,支持2D/3D图形加速;内建HDMI1.4(3D feature)兼容HDCP1.1和DVI1.0;内部的MFC支持MPEG-2/4、H.263、H.264等的编解码和VC1的解码。硬件编解码器实现视频会议和数字电视。该芯片采用了最新的32nm HKMG的先进工艺制程。相比于之前的45nm工艺,功耗方面有了明显的降低,即使是四核,同等测试下的功耗比双核的4210低了40%。四核处理器在达到双核两倍性能的同时,功耗却只有双核的八成,续航和发热都可能会大大改善。目前三星最新的N7100 GALAXY Note2和GALAXY SIII系列手机采用的就是此款芯片,表现相当出色。Exynos4412处理器采用0.4mm pitch值的12x12平方毫米FCMSP封装,降低PCB加工工艺要求。 UT-Exynos4412开发板本着完全展现Exynos4412芯片功能,结合客户反馈与广泛调研,设计而成,其功能全面、接口丰富,完美展现了Samsung Exynos4412芯片的强大,主要面向企业用户进行产品开发过程中,对Exynos4412芯片的性能评估、设计参考使用。其丰富的外设接口及强大的性能,也成为高校、科研机构等单位的最佳科研设备;可为无线通讯、个人导航、摄像、移动游戏音乐视频、PDA、医疗器械、车载、广告机、手机等提供前期测试平台,无论从功能、性价比、调试飞线等方面,都可方便进行,大大缩短公司产品的研发周期。 UT-Exynos4412开发板堪称市面上最强大的ARM平台,采用Exynos4412的主芯片,具有更高的主频和更丰富外设,配置2GB DDR3的内存及8GB iNAND存储,具有稳定性强、可靠性高,能适用于对性能和处理能力有更高要求的嵌入式系统应用场合。 UT-Exynos4412开发板可以选配有无线WIFI模块、Bluetooth、GPS、Camera、3G等模组,支持HDMI1.4(1080P/60Hz)显示,客户可以直接从开发平台中汲取完整的产品信息,甚至可以直接用于后续的产品开发中,完全不同于一般意义的开发平台。 UT-Exynos4412开发板最新的操作系统:Google Android4.0.4 ICS,提供平台完整的源码,支持WIFI、Bluetooth、GPS、Camera、HDMI、3G等选配模块。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_20312079

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值