bigbat 发表于 2020-3-28 19:21

STM32MP157A-DK1测评+内核编译与SD卡烧写(4)

<div class='showpostmsg'><p>原计划调试SPI设备,由于遇到了困难多方查找资料也没有找到解决的办法,只能暂时搁置下来。看来只有自己想办法了。如果自己编写SPI设备的驱动,就需要重新编译内核代码,制作自己的image了。经过艰苦的努力终于用了一点发现。这其中最痛苦的是st的wiki网站实在是慢!!大把的时间都是在等待网站的回应。<br />
准备编译环境<br />
编译的必要条件是安装SDK,安装过程前面有叙述,主要是注意一定的检查环境变量。注意我用的是ubuntu 16.04,有个叫bc的工具据说是统计字符的,这个版本中默认是没有安装的。<br />
apt install bc<br />
安装成功后在进行下面的步骤。<br />
下载安装源码包<br />
en.SOURCES-kernel-stm32mp1-openstlinux-20-02-19.tar.xz<br />
参考资料和README.HOW_TO.txt<br />
1、安装内核源码。</p>

<p>$ tar xvf en.SOURCES-kernel-stm32mp1-openstlinux-20-02-19.tar.xz<br />
$ cd stm32mp1-openstlinux-20-02-19/sources/arm-ostl-linux-gnueabi/linux-stm32mp-4.19-r0/<br />
$ tar xvf linux-4.19.94.tar.xz<br />
源码安装成功!<br />
2、打补丁<br />
&nbsp; &nbsp; $&gt; cd linux-4.19.49&nbsp;<br />
&nbsp; &nbsp; $&gt; for p in `ls -1 ../*.patch`; do patch -p1 &lt; $p; done<br />
不出错误就完成<br />
3、准备编译<br />
&nbsp; &nbsp; $&gt; cd linux-4.19.49&nbsp;<br />
&nbsp; &nbsp; $&gt; mkdir -p ../build<br />
在源码的目录上层建立build目录用来编译<br />
&nbsp; &nbsp; $&gt; make ARCH=arm O=&quot;$PWD/../build&quot; multi_v7_defconfig fragment*.config</p>

<p>&nbsp; &nbsp; $&gt; for f in `ls -1 ../fragment*.config`; do scripts/kconfig/merge_config.sh -m -r -O $PWD/../build $PWD/../build/.config $f; done</p>

<p>&nbsp; &nbsp; $&gt; yes &#39;&#39; | make ARCH=arm oldconfig O=&quot;$PWD/../build&quot;</p>

<p>以上操作在linux-4.19.49 目录完成,检查build目录,应该有makefile等文件</p>

<p>&nbsp; &nbsp; $&gt; cd build</p>

<p>&nbsp; &nbsp; $&gt; make ARCH=arm uImage vmlinux dtbs LOADADDR=0xC2000040</p>

<p>&nbsp; &nbsp; $&gt; make ARCH=arm modules<br />
编译模块和驱动,注意时间较长。</p>

<p>4、开始编译<br />
&nbsp; &nbsp;进入源码目录&nbsp;<br />
&nbsp; &nbsp; $&gt; cd &lt;directory to kernel source code&gt;<br />
&nbsp; &nbsp; * Build kernel images (uImage and vmlinux) and device tree (dtbs)<br />
&nbsp; &nbsp; $&gt; make ARCH=arm uImage vmlinux dtbs LOADADDR=0xC2000040 O=&quot;$PWD/../build&quot;<br />
&nbsp; &nbsp; * Build kernel module<br />
&nbsp; &nbsp; $&gt; make ARCH=arm modules O=&quot;$PWD/../build&quot;<br />
&nbsp; &nbsp; 注意时间较长<br />
5、制作安装固件<br />
&nbsp; &nbsp; * Generate output build artifacts<br />
&nbsp; &nbsp; $&gt; make ARCH=arm INSTALL_MOD_PATH=&quot;$PWD/../build/install_artifact&quot; modules_install O=&quot;$PWD/../build&quot;<br />
&nbsp; &nbsp; $&gt; mkdir -p $PWD/../build/install_artifact/boot/<br />
&nbsp; &nbsp; $&gt; cp $PWD/../build/arch/arm/boot/uImage $PWD/../build/install_artifact/boot/<br />
&nbsp; &nbsp; $&gt; cp $PWD/../build/arch/arm/boot/dts/st*.dtb $PWD/../build/install_artifact/boot/<br />
以上步骤比较顺利完成,在build下发现制作好的内核文件。注意只是内核文件。这次没有更加深入的研究设备驱动的制作。 资料上说是通过修改device tree (dtbs)文件配置来加入驱动的。<br />
6、内核文件的修改。<br />
st公司没有提供GUI类型的linux内核配置的工具,也没有制作各种烧写image的脚本。只是提供了修改内核的方法。<br />
比较靠谱的方法是提供读卡器进行修改内核文件。我没有急着修改SD卡的内容。如果坏了我的板子就&ldquo;变砖&rdquo;啦。先介绍不动手。<br />
SDCARD 是linux能够使用的文件系统,内核和驱动都是磁盘文件。只要替换就可以完成更新。<br />
修改内核<br />
&nbsp; (1)找一个USB读卡器,插入制作好系统的SDCARD。<br />
&nbsp; (2)mount SD卡<br />
&nbsp; (3)进入&lt;path to install_artifact dir&gt;/install_artifact&nbsp;<br />
&nbsp; (4)拷贝boot目录到SDCARD cp -r boot/* /media/$USER/bootfs/<br />
&nbsp; (5)卸载SD卡<br />
修改模块<br />
&nbsp; (1)进入&lt;path to install_artifact dir&gt;/install_artifact&nbsp;<br />
&nbsp; (2)删除连接文件 rm lib/modules/&lt;kernel version&gt;/source lib/modules/&lt;kernel version&gt;/build<br />
&nbsp; (3)制作拷贝列表 &nbsp;find . -name &quot;*.ko&quot; | xargs $STRIP --strip-debug --remove-section=.comment --remove-section=.note --preserve-dates<br />
&nbsp; (4)拷贝文件到SD卡 &nbsp;cp -r lib/modules/* /media/$USER/rootfs/lib/modules/<br />
&nbsp; (5)卸载SD卡</p>

<p>修改板子上的依赖<br />
注意这是在板子上操作<br />
&nbsp; &nbsp; Generate a list of module dependencies (modules.dep) and a list of symbols<br />
&nbsp; &nbsp; provided by modules (modules.symbols):<br />
&nbsp; &nbsp; $&gt; ssh root@&lt;ip of board&gt; depmod -a<br />
&nbsp; &nbsp; Synchronize data on disk with memory<br />
&nbsp; &nbsp; $&gt; ssh root@&lt;ip of board&gt; sync<br />
&nbsp; &nbsp; Reboot the board in order to take update into account<br />
&nbsp; &nbsp; $&gt; ssh root@&lt;ip of board&gt; reboot<br />
7、使用工厂image制作tf卡<br />
首先,下载en.FLASH-stm32mp1-openstlinux-20-02-19.tar.xz软件包。解压到目录下。<br />
制作TF-A卡需要使用工具STM32CubeProgrammer来烧写,本次测试是在windows主机下进行的。安装工具时需要注意,如果先前安装过该软件,需要把DFU驱动先卸载在安装。我没有安装过所以一次就安装好了。<br />
使用一张空白卡制作工作image ,将板子上的sw1的两个都跳线拨到off位置,将TF-A卡插好,将USB-C电缆和ST-link、网线都与PC机相连。然后给板子上电。<br />
上电后,按下板子上的reset按键。打开STM32CubeProgrammer</p>

<p></p>

<p>选择连接方式为USB。如果成功可以出现板子的信息。<br />
使用open file文件卡打开stm32mp1-openstlinux-20-02-19\images\stm32mp1\flashlayout_st-image-weston下的tsv文件。选择你需要使用的。<br />
本次使用&ldquo;FlashLayout_sdcard_stm32mp157a-dk1-basic.tsv&rdquo;<br />
指定Binaries PATH的路径为image的目录。stm32mp1-openstlinux-20-02-19\images\stm32mp1\<br />
单击download,就开始制作TF-A卡了。<br />
完成后,给板子断电。将板子上的sw1的两个都跳线拨到on位置。<br />
上电,就可以看到启动的界面了。</p>

<p>参考资料<br />
https://wiki.st.com/stm32mpu/wiki/STM32MP1_Developer_Package#Installing_the_Linux_kernel<br />
https://wiki.st.com/stm32mpu/wiki/How_to_build_Linux_kernel_user_space_tools</p>

<p><b><font color="#5e7384">此内容由EEWORLD论坛网友<font size="3">bigbat</font>原创,如需转载或用于商业用途需征得作者同意并注明出处</font></b></p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>

freebsder 发表于 2020-3-29 21:42

<p>wiki确实很慢,几个大厂的官网都慢。我这里TI的好点。</p>

bigbat 发表于 2020-3-30 07:54

<p>我没有办法只能用代理上啦,wiki估计是被过滤了吧。真是搞不懂难道我们就无知到什么都相信的地步了吗?</p>
页: [1]
查看完整版本: STM32MP157A-DK1测评+内核编译与SD卡烧写(4)