<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[李辉的博客]]></title><description><![CDATA[专注于嵌入式开发]]></description><link>https://blog.csdn.net/dhauwd</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; dhauwd]]></copyright><item><title><![CDATA[C语言去掉MAC地址中的冒号]]></title><link>https://blog.csdn.net/dhauwd/article/details/120438942</link><guid>https://blog.csdn.net/dhauwd/article/details/120438942</guid><author>dhauwd</author><pubDate>Thu, 23 Sep 2021 17:09:29 +0800</pubDate><description><![CDATA[#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

void strdel(char* s,char del_x)
{
	char *p;
	char *q;
	for(p=s,q=s;*p!='\0';p++)

		if(*p!=del_x)
			*q++=*p;

		*q=*p;
}

int main()
{
	char str_my[64];
	strcpy(str_my,"0C:CF:89:54:99:A6");
	printf("str.]]></description><category></category></item><item><title><![CDATA[C语言，超过10位数的字符串转整型函数]]></title><link>https://blog.csdn.net/dhauwd/article/details/109166726</link><guid>https://blog.csdn.net/dhauwd/article/details/109166726</guid><author>dhauwd</author><pubDate>Mon, 19 Oct 2020 19:13:35 +0800</pubDate><description><![CDATA[#include &lt;stdio.h&gt;

static long str2int(const char* str)
{
  long temp = 0;
  const char* p = str;
  if(str == NULL) return 0;
  if(*str == '-' || *str == '+')
  {
    str ++;
  }
  while( *str != 0)
  {
    if( *str &lt; '0' ...]]></description><category></category></item><item><title><![CDATA[从零开始写一个单向不循环链表]]></title><link>https://blog.csdn.net/dhauwd/article/details/82319356</link><guid>https://blog.csdn.net/dhauwd/article/details/82319356</guid><author>dhauwd</author><pubDate>Sun, 02 Sep 2018 21:11:31 +0800</pubDate><description><![CDATA[从零开始写一个单向不循环链表

总结：郝斌数据结构与算法课程

数据结构概述：
定义：
我们如何把现实中大量的而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器（内存）中，以及在此基础上为实现某个功能，（比如查找某个元素，删除某个元素，对所有的元素的进行排序）

数据结构= 个体的存储 + 个体的关系存储
算法：对存储数据的操作。

再次讨论什么是数据结构？


狭义：数据结构是专门研究数...]]></description><category></category></item><item><title><![CDATA[Linux根文件系统的制作--下]]></title><link>https://blog.csdn.net/dhauwd/article/details/81367056</link><guid>https://blog.csdn.net/dhauwd/article/details/81367056</guid><author>dhauwd</author><pubDate>Thu, 02 Aug 2018 20:30:18 +0800</pubDate><description><![CDATA[Linux根文件系统的制作--下

参考朱有鹏Uboot全集

1、profile文件和用户登录理论

(1)之前添加了/bin/hostname在/etc/sysconfig/HOSTNAME文件中定义一个hostname，实际效果是：命令行下的hostname查到的命令host确实是lhh_210

(2)这个问题解决就要靠profile文件，将提供的profile文件放入/etc/目录即可。...]]></description><category></category></item><item><title><![CDATA[Linux根文件系统制作--中]]></title><link>https://blog.csdn.net/dhauwd/article/details/81348361</link><guid>https://blog.csdn.net/dhauwd/article/details/81348361</guid><author>dhauwd</author><pubDate>Wed, 01 Aug 2018 21:16:06 +0800</pubDate><description><![CDATA[Linux根文件系统制作--中

参考朱有鹏uboot全集

0、根文件系统概况



1、busybox源码下载并编译进去根文件系统

1.1、busybox是一个开源的项目，所以源代码可以直接从网上下载

1.2、busybox的版本的差异不大，版本的新旧没有太大的关系

1.3、下载busybox直接去www.busybox.net官方网站下载都行

下载完后，进行解压：
tar -jxvf...]]></description><category></category></item><item><title><![CDATA[Linux根文件系统的原型的制作1]]></title><link>https://blog.csdn.net/dhauwd/article/details/81321363</link><guid>https://blog.csdn.net/dhauwd/article/details/81321363</guid><author>dhauwd</author><pubDate>Tue, 31 Jul 2018 21:49:41 +0800</pubDate><description><![CDATA[Linux根文件系统的原型的制作1

参考朱有鹏uboot全集

0、自己制作ext2格式的根文件系统

(1)mke2fs介绍：是一个应用程序，在ubuntu中默认是安装了的，这个应用程序就是默认用来制作镜像的。

(2)一般用来制作各种不同格式的rootfs的应用程序的名字都很相似，类似于mkfs.xxx(比如用来制作ext2格式的rootfs的工具)

(3)mkfs.ext2等都是mke2...]]></description><category></category></item><item><title><![CDATA[手把手教你搭建TFTP服务器]]></title><link>https://blog.csdn.net/dhauwd/article/details/81281221</link><guid>https://blog.csdn.net/dhauwd/article/details/81281221</guid><author>dhauwd</author><pubDate>Mon, 30 Jul 2018 10:49:52 +0800</pubDate><description><![CDATA[手把手教你搭建TFTP服务器

前言，东西来自于网络，但是根据自己的理解写了一下建议，记录下来，让下次不要在网络上面浪费时间搜索。

1、保证自己的虚拟机能够上网

测试方法：里面一般都有一个火狐浏览器，能够上百度就证明能够上网

2、在线安装需要的软件 tftp服务器时基于应用层的一种网络层的协议，里面是基于CS结构的，所以说我们需要下载tftp的服务器和客户端。

2.1、安装tftp-hpa...]]></description><category></category></item><item><title><![CDATA[如何编译Linux内核文件]]></title><link>https://blog.csdn.net/dhauwd/article/details/81257892</link><guid>https://blog.csdn.net/dhauwd/article/details/81257892</guid><author>dhauwd</author><pubDate>Sat, 28 Jul 2018 10:10:15 +0800</pubDate><description><![CDATA[如何编译Linux内核文件

参考：朱有鹏Uboot的全集

前言：我们的Linux内核文件动则数万个文件，很多个子文件夹，当然是使用Makefile管理了，但是是不是真的仅仅只是make一下就可以了呢？答案是不可能的，因为Linux内核比我们uboot更加的复杂，所以Linux内核也需要配置再进行编译的，而且Linux内核的配置项因为有数千项目，所以Linux靠手工配置是不现实的，所以大牛就是大...]]></description><category></category></item><item><title><![CDATA[从零开始的UBOOT的学习11-为Ubuntu安装合适的交叉编译工具链]]></title><link>https://blog.csdn.net/dhauwd/article/details/80723157</link><guid>https://blog.csdn.net/dhauwd/article/details/80723157</guid><author>dhauwd</author><pubDate>Mon, 18 Jun 2018 11:21:58 +0800</pubDate><description><![CDATA[从零开始的UBOOT的学习11-为Ubuntu安装合适的交叉编译工具链

参考朱有鹏UBOOT全集

1、我们使用S5PV210的开发板，所以我们需要使用arm-none-linux-gnueabi编译工具链

(1)第一步：获取交叉编译工具链arm-2009q3.tar.bz2
(2)第二步：放置在Ubuntu中的某一个合适的目录下面，这里我们使用/user/local/arm其中里面是没有ar...]]></description><category></category></item><item><title><![CDATA[从零开始的UBOOT的学习10--Ubuntu上网问题的解决]]></title><link>https://blog.csdn.net/dhauwd/article/details/80717453</link><guid>https://blog.csdn.net/dhauwd/article/details/80717453</guid><author>dhauwd</author><pubDate>Sun, 17 Jun 2018 11:11:14 +0800</pubDate><description><![CDATA[从零开始的UBOOT的学习10--Ubuntu上网问题的解决1、使用NAT的方式进行上网配置第一个需要注意的事情就是选择NAT模式还是桥接模式。第二个需要注意的Ubuntu中网络配置文件。/etc/network/interfaces文件里面如果一定需要使用NAT模式的话，一定要把静态的IP设置为DCTP模式。auto lo
iface lo inet loopback

auto eth0
if...]]></description><category></category></item><item><title><![CDATA[从零开始的UBOOT的学习--环境变量]]></title><link>https://blog.csdn.net/dhauwd/article/details/80712055</link><guid>https://blog.csdn.net/dhauwd/article/details/80712055</guid><author>dhauwd</author><pubDate>Sat, 16 Jun 2018 11:42:41 +0800</pubDate><description><![CDATA[从零开始的UBOOT的学习--环境变量参考朱有鹏UBOOT全集1、环境变量的作用让我们可以不用修改UBOOT的源代码，而是通过修改环境变量来影响UBOOT运行的一些数据和特性，比如通过修改bootdelay环境变量就可以更改系统开机自动启动的倒数的秒数。2、环境变量的优先级(1)uboot代码中当中有一个值，环境变量中也有一个值。其实UBOOT代码中的值是存放在内存当中的，环境变量的值是存放在硬盘...]]></description><category></category></item><item><title><![CDATA[从零开始的UBOOT的学习8--命令体系]]></title><link>https://blog.csdn.net/dhauwd/article/details/80467026</link><guid>https://blog.csdn.net/dhauwd/article/details/80467026</guid><author>dhauwd</author><pubDate>Sun, 27 May 2018 09:33:33 +0800</pubDate><description><![CDATA[从零开始的UBOOT的学习8--命令体系参考朱有鹏UBOOT全集的一部分1、从UBOOT的启动阶段的第二流程到命令体系(1)在UBOOT中使用一个死循环，实现了命令体系：在这个main_loop()函数里面实现了命令的注册，存储，解析，处理的过程而且这个是一个死循环，也就是说会不断的执行这个函数。    for (;;) 
    {
        main_loop ();
    }
2、从...]]></description><category></category></item><item><title><![CDATA[从零开始的UBOOT的学习7--启动内核]]></title><link>https://blog.csdn.net/dhauwd/article/details/80379706</link><guid>https://blog.csdn.net/dhauwd/article/details/80379706</guid><author>dhauwd</author><pubDate>Sun, 20 May 2018 08:25:56 +0800</pubDate><description><![CDATA[从零开始的UBOOT的学习7--启动内核参考朱有鹏UBOOT全集1、UBOOT是一个裸机程序UBOOT的本质就是一个复杂点的裸机程序。和我们在ARM裸机全集中学习的每一个裸机程序并没有本质区别。2、ARM裸机第十六部分写了一个简单的shell，这东西其实就是一个mini型的UBOOT。(1)操作系统内核本身就是一个裸机程序，和UBOOT、和其他的裸机程序并没有本质区别。(2)区别就是操作系统运行起...]]></description><category></category></item><item><title><![CDATA[从零开始的UBOOT的学习6--start_armboot]]></title><link>https://blog.csdn.net/dhauwd/article/details/80379700</link><guid>https://blog.csdn.net/dhauwd/article/details/80379700</guid><author>dhauwd</author><pubDate>Sun, 20 May 2018 08:21:53 +0800</pubDate><description><![CDATA[从零开始的UBOOT的学习6--start_armboot参考朱有鹏UBOOT全集1、start_armboot函数简介(1)这个函数的是在UBOOT/lib_arm/board.c的第444行开始到908行结束(2)450行里面还不是全部的函数，因为里面调用了很多函数。(3)此函数构成了UBOOT启动部分的第二阶段。(4)宏观分析：UBOOT的第二阶段应该做什么？4.1、概括来讲UBOOT的第一...]]></description><category></category></item><item><title><![CDATA[从零开始的UBOOT的学习5--start.s上]]></title><link>https://blog.csdn.net/dhauwd/article/details/80216452</link><guid>https://blog.csdn.net/dhauwd/article/details/80216452</guid><author>dhauwd</author><pubDate>Sun, 06 May 2018 17:39:37 +0800</pubDate><description><![CDATA[从零开始的UBOOT的学习5--start.s上
1、start.s包含的头文件的意思

一定要记住，UBOOT是使用配置的方式，使其能够支持如此多的开发板的。

回顾mkconfig.mk文件产生的4个符号链接，此4个符号链接会将来能够找到头文件起到了关键性的作用。

(1)在include目录下面创建asm文件，指向asm-arm
(2)在include/asm-arm下创建一]]></description><category></category></item><item><title><![CDATA[从零开始的UBOOT的学习4--回顾重定位的过程]]></title><link>https://blog.csdn.net/dhauwd/article/details/80213592</link><guid>https://blog.csdn.net/dhauwd/article/details/80213592</guid><author>dhauwd</author><pubDate>Sun, 06 May 2018 13:01:44 +0800</pubDate><description><![CDATA[从零开始的UBOOT的学习4--回顾重定位的过程

参考朱有鹏ARM裸机课程
1、什么是重定位？

(1)很多时候我们的启动介质没有那么大的空间进行启动程序，所以为了节约成本，我们会在启动介质使用SRAM或者NORFLASH，然后使用一个长跳转指令跳入到DDR内存当中运行，此时就有足够的地方运行大程序了。
2、链接地址和运行地址

(1)对于位置有关代码来说：最终执行时的运行地址和]]></description><category></category></item><item><title><![CDATA[从零开始的UBOOT的学习3--主Makefile的分析]]></title><link>https://blog.csdn.net/dhauwd/article/details/80149843</link><guid>https://blog.csdn.net/dhauwd/article/details/80149843</guid><author>dhauwd</author><pubDate>Mon, 30 Apr 2018 16:04:51 +0800</pubDate><description><![CDATA[从零开始的UBOOT的学习3--主Makefile的分析参考朱有鹏UBOOT全集前言：很多类似于STM32的单片机，所有的东西，IDE集成开发环境已经帮你配置好怎么使用的，代码段或者数据段怎么在程序中链接，我们的各个文件的.c或者.h文件应该是怎么样的，在Linux的ARM中是没有的，所有的都需要我们自己定制化，所谓的定制化编译过程，也就是写Makefile。1、UBOOT版本号的确认(1)UBO...]]></description><category></category></item><item><title><![CDATA[从零开始的UBOOT的学习2--shell的简单知识]]></title><link>https://blog.csdn.net/dhauwd/article/details/80030848</link><guid>https://blog.csdn.net/dhauwd/article/details/80030848</guid><author>dhauwd</author><pubDate>Sat, 21 Apr 2018 16:26:36 +0800</pubDate><description><![CDATA[从零开始的UBOOT的学习2--shell的简单知识

参考朱有鹏的UBOOT全集

为什么我们要使用shell？因为shell里面的命令都可以在Linux下的命令行中执行，为啥我们需要使用shell，然后再命令行中执行它？因为我们需要用它批量的执行一些操作。这样我们就不会每次都重复的在命令行中敲命令。
1、shell变量的定义

(1)shell是一种脚本语言（语言中的变量如果有明]]></description><category></category></item><item><title><![CDATA[从零开始的UBOOT的学习1--UBOOT是用来干嘛的？]]></title><link>https://blog.csdn.net/dhauwd/article/details/80030780</link><guid>https://blog.csdn.net/dhauwd/article/details/80030780</guid><author>dhauwd</author><pubDate>Sat, 21 Apr 2018 16:22:27 +0800</pubDate><description><![CDATA[从零开始的UBOOT的学习1--UBOOT是用来干嘛的？

参考朱有鹏UBOOT全集

UBOOT本身就是为了启动内核，其实你自己写一个BootLoader是比较简单的，没有UBOOT的那么多的工具，UBOOT提供了两个比较强的工具：环境变量和命令，使得UBOOT的启动内核游刃有余。
1、UBOOT的常用命令

(1)tftp下载指令tftp

UBOOT本身主要的目标是为了启动]]></description><category></category></item><item><title><![CDATA[解决朱有鹏开发板--主机--虚拟机不能互相PING通问题]]></title><link>https://blog.csdn.net/dhauwd/article/details/79942771</link><guid>https://blog.csdn.net/dhauwd/article/details/79942771</guid><author>dhauwd</author><pubDate>Sat, 14 Apr 2018 18:14:54 +0800</pubDate><description><![CDATA[解决朱有鹏开发板--主机--虚拟机不能互相PING通问题

前言：查遍整个网络，没有人发表这个问题，在视频中老朱得到的结论是UBOOT有问题，结果，经过实践发现，是可以同时PING通的，而且不用花很多时间，今天就把它分享出来。
1、排查问题过程

我的电脑环境WIN10+Ubuntu14.04+210开发板
我是可以用无线网卡实现三者的PING通的，说实话用有线真的很麻烦。

(1]]></description><category></category></item></channel></rss>