当前位置: 首页 > news >正文

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM平台编程第五天-kernel配置(物联技术666)

链接:https://pan.baidu.com/s/1eb94AaDM-cIZsbr929Isbw?pwd=1688
提取码:1688

上午:linux内核介绍                徐登伟老师

下午:linux的配置

教学内容:

一、基本kernel的制作:

1、去开源社区下载原版kernel,linux-2.6.34.tar.bz2

2.  解压linux-2.6.34.tar.bz2源码包

  tar jxvf linux-2.6.34.tar.bz2  -C  /home/

3.  修改linux-2.6.34/Makefile文件,在makefile中找到以下两条信息并做修改

     ARCH ? =arm                       //指定是arch/arm

     CROSS_COMPILE ?=/usr/local/arm/4.3.2/bin/arm-linux- //指定编译器是目录下的交叉编译

注意:交叉编译器的环境变量也需要改为arm-linux-gcc-4.3.2

    #export PATH=/usr/local/arm/4.3.2/bin/:$PATH    //加入临时环境变量

4.  修改平台输入时钟

修改平台的时钟频率,修改内核源码“arch/arm/mach-s3c2440/mach-smdk2440.c”

把时钟初始化中(S3C24XX_init_clocks(16934400 ))的16934400 改为12000000,因为我们的开发板上为12M

5.  修改机器类型ID号(一般可以不修改,主要是要在vivi分表的时候和这里保持一致)

   bootloader启动内核时,会传递机器类型ID进来,这里需根据bootloadr传进的ID修改内核ID号

   在内核源码的“arch/arm/tools/mach-types”文件查找S3C2440,这里刚好与我们的bootloader相同,所以不用做修改,直接保存退出即可,如果不同则根据bootloader的内容修改此文件,或根据此文件修改boorloader的内容(在vivi中可通过param show查看)。

6.  解压yaffs_patch.tar.bz2源码包,进入yaffs2文件夹,给内核打上补丁使内核支持yaffs2

   # ./ patch-ker.sh  c  /home/linux-2.6.34

7.  修改内核mtd分区和bootloader(vivi)使其一致(这步主要是为vivi服务)

编辑文件arch/arm/plat-s3c24xx/common-smdk.c(同样和vivi分表一致)

static struct mtd_partition smdk_default_nand_part[] =

 {

        [0] = {

                .name      = "vivi",          //命令名字

                .size = 0x00030000,        //大小     

                .offset      = 0,                  //开始位置

        },

        [1] = {

                .name      = "kernel",

                .offset = 0x00050000,

                .size = 0x00300000,

        },

        [2] = {

                .name      = "rootfs",

                .offset = 0x00350000,

                .size = 0x03cac000,

        }

};

8.  修改文件drivers/mtd/nand/s3c2410.c

将s3c2410_nand_init_chip函数里的NAND_ECC_SOFT(switch  case后面的不用改)改为NAND_ECC_NONE(因为在内核中默认配置不支持ECC校验,当然也可以在内核配置时选中ECC选项)

9.  到llinux-2.6.30目录下执行命令

   #cp  arch/arm/configs/s3c2410_defconfig  .config

10.   执行make menuconfig,并对选项进行配置

1)System Type --->

        S3C2440 and S3C2442 machines --->

仅保留SMDK2440 与SMDK2440 whith S3C2440 CPU module两个选项,将其他的选项全部勾掉

2)Kernel Features --->

        [*]Use the arm EABI to compile the kernel(选中该选项)

3)File systems --->

        a、把与ext2 ext3 ext4相关的所有选项全部去掉

        b、Miscellaneous filesystems --->

                <*>YAFFS2 file system support(选中此选项)

去除所有与jffs2相关的选项

保存退出

11、make zImage,在arch/arm/boot下生成编译好的可执行程序

    或make uImage,在arch/arm/boot下生成编译好的可执行程序

二、带设备驱动的kernel

开始先重复上面的1-10步:

1dm9000网卡驱动的移植:

1)修改arch/arm/plat-s3c24xx/devs.c 文件,增加以下代码:

/****add by dengwei*********************************/

#include <linux/dm9000.h>

static struct resource s3c_dm9k_resource[] =

{

     [0] =

      {

             .start = S3C2410_CS3,               //网卡连接在CS3总线上

             .end = S3C2410_CS3 + 3,

             .flags = IORESOURCE_MEM,

     },

     [1] =

     {

             .start = S3C2410_CS3 + 4,

             .end = S3C2410_CS3 + 4 + 3,

             .flags = IORESOURCE_MEM,

     },

     [2] = {

     .start = IRQ_EINT7,

     .end = IRQ_EINT7,

     .flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING,

     }

};

static struct dm9000_plat_data s3c_dm9k_platdata =

{

       .flags = DM9000_PLATF_16BITONLY,

};

struct platform_device s3c_device_dm9k =

{

     .name = "dm9000",

     .id = 0,

     .num_resources = ARRAY_SIZE(s3c_dm9k_resource),

     .resource = s3c_dm9k_resource,

     .dev =

     {

         .platform_data = &s3c_dm9k_platdata,

     }

};

EXPORT_SYMBOL(s3c_device_dm9k);

/*************************add bu dengwei***************************/

2)修改 arch/arm/mach-s3c2440/mach-smdk2440.c文件

        修改struct platform_device *smdk2440_devices[] __initdata结构体增加以下代码:

        static struct platform_device *smdk2440_devices[] __initdata =

        {

       &s3c_device_ohci,

       &s3c_device_lcd,

       &s3c_device_wdt,

       &s3c_device_i2c0,

       &s3c_device_iis,

       &s3c_device_dm9k,               //for dm9000   add by dengwei

        };

        3)修改以下文件 arch/arm/plat-s3c24xx/include/plat/s3c244x.h

                extern struct platform_device s3c_device_dm9k;  // add by dengwei

        4)修改drivers/net/dm9000.c源码:

    在头文件区增加头文件:

#include  <mach/regs-mem.h>

        大约1365行左右增加以下代码:

        static int __devinit dm9000_probe(struct platform_device *pdev)

{

        //add   here

}

        注意:添加在dm9000_probe函数的开头

        /**********add by dengwei******************************************/

       #if  defined(CONFIG_ARCH_S3C2440)

        int oldval_bwscon = *((volatile unsigned int *)S3C2410_BWSCON);

*((volatile unsigned int *)S3C2410_BWSCON)=(oldval_bwscon&~(3<<16))| S3C2410_BWSCON_DW3_16|S3C2410_BWSCON_WS3|S3C2410_BWSCON_ST3; //设置BANK3:总线宽度为16,使能nWAIT

    *((volatile unsigned int *)S3C2410_BANKCON3) = 0x1f7c;     //设置BANK3的时间参数

#endif

/**********add by dengwei*************************************************/

        5)修改make menuconfig配置选项:

                Devices   Drivers --->

                        Network device support --->

                              Ethernet (10 or 100) --->

                                        [*]DM9000 support

                                        (4)DM9000 maxinum        debug level    

//仅保留这两个选项,其余的全部去掉

         

        6)重新编译内核,烧入开发板中即可

        7)第一次使用的开发板需使用 ifconfig eth0 hw ether 12:34:56:78:32:65 设置mac地址

    (MAC地址可以随便设置)

          使用ifconfig eth0 192.168.220.*设置开发板IP

          使用ping命令ping主机即可

2、USB驱动(U盘支持)

        配置内核对USB设备的支持,2.6.34内核中对USB设备的支持已经非常全面了

        这里只需要按照以下配置  就可以了,配置完后重新编译内核烧到开发板上

        1)、修改make menuconfig

        SCSI device support --->

        < > RAID Transport Class

        <*> SCSI device support

        < > SCSI target support

        [*] legacy /proc/scsi/ support

        *** SCSI support type (disk, tape, CD-ROM) ***

        <*> SCSI disk support

        < > SCSI tape support

        < > SCSI OnStream SC-x0 tape support

        < > SCSI CDROM support

        <*> SCSI generic support

        < > SCSI media changer support

    [*] HID Devices --->

        --- HID Devices

        -*- Generic HID support

        [ ] /dev/hidraw raw HID device support

        *** USB Input Devices ***

        <*> USB Human Interface Device (full HID) support

        [ ] PID device support

        [*] /dev/hiddev raw HID device support

    [*] USB support --->

        {*} Support for Host-side USB

        [ ] USB verbose debug messages

        [ ] USB announce new devices

        *** Miscellaneous USB options ***

        [*] USB device filesystem

        [*] USB device class-devices (DEPRECATED)

        <*> OHCI HCD support

        <*> USB Mass Storage support

        2)、插入U盘。

        当系统启动后插入U盘就会出现一些信息,可以看到sda就是U盘设备了,sda1是U盘的一个分区。

         mount  /dev/sda1  /mnt/ -o utf8

         utf8 参数可以识别中文

3、LCD

1)、修改 arch/arm/mach-s3c2440/mach-smdk2440.c 如下:

/* LCD driver info */

static struct s3c2410fb_display smdk2440_lcd_cfg __initdata = {

        .lcdcon5  = S3C2410_LCDCON5_FRM565 |

        //                S3C2410_LCDCON5_INVVLINE |

        //                S3C2410_LCDCON5_INVVFRAME |

                          S3C2410_LCDCON5_PWREN |

                          S3C2410_LCDCON5_HWSWP,

        .type        = S3C2410_LCDCON1_TFT,

        .width              = 320,

        .height             = 240,

        .pixclock = 64000,                 /* HCLK 60 MHz, divisor 10 */

        .xres        = 320,

        .yres        = 240,

        .bpp                 = 16,

        .left_margin    = 18,

        .right_margin  = 38,

        .hsync_len       = 30,

        .upper_margin = 18,

        .lower_margin = 18,

        .vsync_len       = 3,

};

static struct s3c2410fb_mach_info smdk2440_fb_info __initdata = {

        .displays  = &smdk2440_lcd_cfg,

        .num_displays = 1,

        .default_display = 0,

#if 0

        /* currently setup by downloader */

        .gpccon           = 0xaa940659,

        .gpccon_mask = 0xffffffff,

        .gpcup             = 0x0000ffff,

        .gpcup_mask   = 0xffffffff,

        .gpdcon           = 0xaa84aaa0,

        .gpdcon_mask = 0xffffffff,

        .gpdup             = 0x0000faff,

        .gpdup_mask   = 0xffffffff,

#endif

        .gpccon =       0xaa955699,      //这是将GPC和GPD设置成功能引脚,也可以不设置

        .gpccon_mask =  0xffc003cc,

        .gpcup             = 0x0000ffff,

        .gpcup_mask   = 0xffffffff,

        .gpdcon =       0xaa95aaa1,

        .gpdcon_mask =  0xffc0fff0,

        .gpdup             = 0x0000faff,

        .gpdup_mask   = 0xffffffff,

       

        //.lpcsel           = ((0xCE6) & ~7) | 1<<4,

        .lpcsel              = 0xf82,  //设置TCONSEL寄存器选择三星240x320

};

static struct platform_device *smdk2440_devices[] __initdata = {

        &s3c_device_ohci,

        &s3c_device_lcd,                   //检查这里有没有加上

        &s3c_device_wdt,

        &s3c_device_i2c0,

        &s3c_device_iis,

        &s3c_device_dm9k,               //for dm9000 add by xiuhai.deng

};

a、如果要让系统启动起来看到 bootlogo 小企鹅,必须得在 make menuconfig 中进行配置添加

     在 Device Drivers ---> Graphics support ---> Bootup logo下面可以全部选中支持

b、打开gimp号称 linux 下的 photoshop ,安装windows版(gimp-2.6.9-i686-setup.exe)

     打开任何格式的一张将要转换的图片

     选择:图像--->模式--->索引颜色转换--->最大颜色数量设置为(244)--->转换

     还可以通过:图像--->缩放图像--->设置想要的图像大小

     最后:文件--->另存为--->选择ppm格式--->保存格式为 ASCII

c、将转换好的图片拷贝到 drivers\video\logo 替换 logo_linux_clut224.ppm

     并删除 logo_linux_clut224.c和logo_linux_clut224.o重新make zImage

d、且对于大多系统bootlogo图片的大小可以随便,且无需改动源码就可以显示

e、去掉10分钟后自动关屏问题:

    在有一个 drivers/char/vt.c 文件其中有一个变量(blankinterval)可以设置它

    来修改自动关屏的时间,也可以在函数(blank_screen_t)开头直接返回,这

    样就永远不会关屏了

4、触模屏

1)、将 drivers/input/touchscreen/s3c2410_ts.c 换掉(在课件文件夹内)

2)、make menuconfig

      Device Driver -->

             Input device support -->

                Touchscreens -->

                    [*]Samsung S3C2410 touchscreen input driver (它对应s3c2410_ts.c驱动) 

5、UDA1341声卡驱动

1)、make menuconfig 声卡的配置是:

Device Drivers

      <*>Sound card support

       <*>Advanced Linux Sound Architecture  --->(除这项外,其它全部不选中)

             <*>Advanced Linux Sound Architecture (除了以下选项,其它均不选中)

             <*>   OSS Mixer API

             <*>   OSS PCM (digital audio) API

             [*]     OSS PCM (digital audio) API - Include plugin system

             [*]   Verbose procfs contents

                           <*>ALSA for Soc audio support(只选择下面两项)

                                <*>SoC Audio for the Samsung S3C24XX chips

                              <*>SoC I2S Audio support UDA134X wired to a S3C24XX

2)、配置声卡驱动

下面是我在mach-smdk2440.c上修改的地方:

#include <sound/s3c24xx_uda134x.h>

static struct s3c24xx_uda134x_platform_data s3c24xx_uda134x_data =

{

       .l3_clk = S3C2410_GPG(10),  //这三个引脚是跟据自己开发板的硬件连接决定的

       .l3_data = S3C2410_GPG(9),

       .l3_mode = S3C2410_GPG(11),

       .model = UDA134X_UDA1341,

};

static struct platform_device s3c24xx_uda134x =

{

       .name = "s3c24xx_uda134x",

       .dev =

{

              .platform_data    = &s3c24xx_uda134x_data,

       }

};

static struct platform_device *smdk2440_devices[] __initdata =

{

       &s3c_device_usb,

       &s3c_device_lcd,

       &s3c_device_wdt,

       &s3c_device_i2c0,

       &s3c_device_iis,

       &s3c_device_rtc,

       &s3c24xx_uda134x,

};

3)、编译、下载

在内核目录下make zImage后将生成的内核文件烧写到开发板。

4)、测试

启动开发板后将已经拷贝歌曲的U盘插入到开发板的USB接口,挂载U盘后,运行”cat  01.mp3 > /dev/dsp”命令后听到音频耳机输出哧哧的声音,证明声卡驱动配置成功。

6、mmc/SD card driver

1)、arch/arm/mach-s3c2440/mach-smdk2440.c platform结构中增加&s3c_device_sdi语句。

static struct platform_device *smdk2440_devices[] __initdata =

 {

&s3c_device_usb,

&s3c_device_lcd,

&s3c_device_wdt,

&s3c_device_i2c,

&s3c_device_iis,

&s3c_device_nand,

&s3c_device_sdi,           //add here

};

     在make menuconfig时选上所有关于sd卡的信息,要想支持中文还得选上:

Device Drivers --->

    <*> MMC/SD/SDIO card support --->

        --- MMC/SD/SDIO card support

        [ ] MMC debugging

        [ ] Allow unsafe resume (DANGEROUS)

        *** MMC/SD/SDIO Card Drivers ***

        <*> MMC block device driver

        [*] Use bounce buffer for simple hosts

        < > SDIO UART/GPS class support

        < > MMC host test driver

        *** MMC/SD/SDIO Host Controller Drivers ***

        < > Secure Digital Host Controller Interface support

        < > MMC/SD/SDIO over SPI

        <*> Samsung S3C SD/MMC Card Interface support

      File system--》

            DOS/FAT/NT Filesystems--》

                       VFAT(Windows-95)fs support

               (437)Default codepage for FAT

               **把437改为936

            Native language support -->

                 [*]Simplified Chinese charset

                 [*]NLS UTF-8

        这样就可直接挂载了 mount -t vfat /dev/mmcblk0 /mnt

        如果sd卡分区了 mount -t vfat /dev/mmcblk0p1 /mnt

        直接读写sd就可以了

2)、爱普板子SD卡少接两根引脚,分别是检测SD卡插拔的中断引脚和SD卡写保护的引脚

所以插上SD卡后要重启才能起作用

相关文章:

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM平台编程第五天-kernel配置(物联技术666)

链接&#xff1a;https://pan.baidu.com/s/1eb94AaDM-cIZsbr929Isbw?pwd1688 提取码&#xff1a;1688 上午&#xff1a;linux内核介绍 徐登伟老师 下午&#xff1a;linux的配置 教学内容&#xff1a; 一、基本kernel的制作&#xff1a; 1、去开源社区下载原…...

Java笔记(死锁、线程通信、单例模式)

一、死锁 1.概述 死锁 : 死锁是指两个或两个以上的进程在执行过程中&#xff0c;由于竞争资源或者由于彼此通信而造成的一种阻塞的现象&#xff0c;若无外力作用&#xff0c;它们都将无法往下执行。此时称系统处于死锁状态或系统产生了死锁&#xff0c;这些永远在互相等待的进…...

DAY11_(简易版)VUEElement综合案例

目录 1 VUE1.1 概述1.1.1 Vue js文件下载 1.2 快速入门1.3 Vue 指令1.3.1 v-bind & v-model 指令1.3.2 v-on 指令1.3.3 条件判断指令1.3.4 v-for 指令 1.4 生命周期1.5 案例1.5.1 需求1.5.2 查询所有功能1.5.3 添加功能 2 Element2.0 element-ui js和css和字体图标下载2.1 …...

【Kafka】开发实战和Springboot集成kafka

目录 消息的发送与接收生产者消费者 SpringBoot 集成kafka服务端参数配置 消息的发送与接收 生产者 生产者主要的对象有&#xff1a; KafkaProducer &#xff0c; ProducerRecord 。 其中 KafkaProducer 是用于发送消息的类&#xff0c; ProducerRecord 类用于封装Kafka的消息…...

【C语言】(1)初识C语言

什么是C语言 C语言是一种广泛应用的计算机编程语言&#xff0c;它具有强大的功能和灵活性&#xff0c;使其成为系统编程和底层开发的首选语言。C语言的设计简洁、高效&#xff0c;且不依赖于特定的硬件或系统&#xff0c;因此在各种计算平台上都能稳定运行。 C语言的特点 高…...

SpringCloudStream整合MQ(待完善)

概念 Spring Cloud Stream 的主要目标是各种各样MQ的学习成本&#xff0c;提供一致性的编程模型&#xff0c;使得开发者能够更容易地集成消息组件&#xff08;如 Apache Kafka、RabbitMQ、RocketMQ&#xff09; 官网地址&#xff1a;Spring Cloud Stream 组件 1. Binder 2…...

【Java 数据结构】包装类简单认识泛型

包装类&简单认识泛型 1 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱 2 什么是泛型3 引出泛型3.1 语法 4 泛型类的使用4.1 语法4.2 示例4.3 类型推导(Type Inference) 5 泛型如何编译的5.1 擦除机制5.2 为什么不能实例化泛型类型数组 6 泛型…...

第139期 做大还是做小-Oracle名称哪些事(20240125)

数据库管理139期 2024-01-25 第139期 做大还是做小-Oracle名称哪些事&#xff08;20240125&#xff09;1 问题2 排查3 扩展总结 第139期 做大还是做小-Oracle名称哪些事&#xff08;20240125&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#xff08;尹海文&#xff09; Oracle A…...

驱动开发--多路复用-信号

一、多路复用 每个进程都有一个描述符数组&#xff0c;这个数组的下标为描述符&#xff0c; 描述符的分类&#xff1a; 文件描述符&#xff1a;设备文件、管道文件 socket描述符 1.1 应用层&#xff1a;三套接口select、poll、epoll select&#xff1a;位运算实现 监控的描…...

LeetCode 2859. 计算 K 置位下标对应元素的和【位操作】1000

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…...

composer安装hyperf后,nginx配置hyperf

背景 引入hyperf项目用作微服务&#xff0c;使用composer 安装hyperf后&#xff0c;对hyperf进行nginx配置。 配置步骤 因为hyperf监听的是端口&#xff0c;不像其他laravel、lumen直接指向文件即可。所有要监听端口号。 1 配置nginx server {listen 80;//http&#xff1a…...

Flink对接Kafka的topic数据消费offset设置参数

scan.startup.mode 是 Flink 中用于设置消费 Kafka topic 数据的起始 offset 的配置参数之一。 scan.startup.mode 可以设置为以下几种模式&#xff1a; earliest-offset&#xff1a;从最早的 offset 开始消费数据。latest-offset&#xff1a;从最新的 offset 开始消费数据。…...

TryHackMe-Umbrella

靶场介绍 Breach Umbrella Corp’s time-tracking server by exploiting misconfigurations around containerisation. 利用集装箱化的错误配置&#xff0c;破坏Umbrella公司的时间跟踪服务器。 Task 1 What is the DB password? 数据库的密码是多少&#xff1f; 端口扫描&am…...

Excel导出警告:文件格式和拓展名不匹配

原因描述&#xff1a; Content-Type 原因&#xff1a;Content-Type&#xff0c;即内容类型&#xff0c;一般是指网页中存在的Content-Type&#xff0c;用于定义网络文件的类型和网页的编码&#xff0c;决定文件接收方将以什么形式、什么编码读取这个文件&#xff0c;这就是经常…...

kafka集群和Filebeat+Kafka+ELK

一、Kafka 概述 1.1 为什么需要消息队列&#xff08;MQ&#xff09; 主要原因是由于在高并发环境下&#xff0c;同步请求来不及处理&#xff0c;请求往往会发生阻塞。比如大量的请求并发访问数据库&#xff0c;导致行锁表锁&#xff0c;最后请求线程会堆积过多&#xff0c;从…...

golang map真有那么随机吗?——map遍历研究

在随机选取map中元素时&#xff0c;本想用map遍历的方式来返回&#xff0c;但是却并没有通过测试。 那么难道map的遍历并不是那么的随机吗&#xff1f; 以下代码参考go1.18 hiter是map遍历的结构&#xff0c;主要记录了当前遍历的元素、开始位置等来完成整个遍历过程 // A ha…...

详细分析对比copliot和ChatGPT的差异

Copilot 和 ChatGPT 是两种不同的AI工具&#xff0c;分别在不同领域展现出了强大的功能和潜力&#xff1a; GitHub Copilot 定位与用途&#xff1a;GitHub Copilot 是由GitHub&#xff08;现为微软子公司&#xff09;和OpenAI合作开发的一款智能代码辅助工具。它主要集成于Visu…...

TENT:熵最小化的Fully Test-Time Adaption

摘要 在测试期间&#xff0c;模型必须自我调整以适应新的和不同的数据。在这种完全自适应测试时间的设置中&#xff0c;模型只有测试数据和它自己的参数。我们建议通过test entropy minimization (tent[1])来适应:我们通过其预测的熵来优化模型的置信度。我们的方法估计归一化…...

研发日记,Matlab/Simulink避坑指南(五)——CAN解包 DLC Bug

文章目录 前言 背景介绍 问题描述 分析排查 解决方案 总结 前言 见《研发日记&#xff0c;Matlab/Simulink避坑指南&#xff08;一&#xff09;——Data Store Memory模块执行时序Bug》 见《研发日记&#xff0c;Matlab/Simulink避坑指南(二)——非对称数据溢出Bug》 见《…...

机器人3D视觉引导半导体塑封上下料

半导体塑封上下料是封装工艺中的重要环节&#xff0c;直接影响到产品的质量和性能。而3D视觉引导技术的引入&#xff0c;使得这一过程更加高效、精准。它不仅提升了生产效率&#xff0c;减少了人工操作的误差&#xff0c;还为半导体封装技术的智能化升级奠定了坚实的基础。 传统…...

(十二)Head first design patterns代理模式(c++)

代理模式 代理模式&#xff1a;创建一个proxy对象&#xff0c;并为这个对象提供替身或者占位符以对这个对象进行控制。 典型例子&#xff1a;智能指针... 例子&#xff1a;比如说有一个talk接口&#xff0c;所有的people需要实现talk接口。但有些人有唱歌技能。不能在talk接…...

C++从零开始的打怪升级之路(day21)

这是关于一个普通双非本科大一学生的C的学习记录贴 在此前&#xff0c;我学了一点点C语言还有简单的数据结构&#xff0c;如果有小伙伴想和我一起学习的&#xff0c;可以私信我交流分享学习资料 那么开启正题 今天分享的是关于vector的题目 1.删除有序数组中的重复项 26. …...

《设计模式的艺术》笔记 - 观察者模式

介绍 观察者模式定义对象之间的一种一对多依赖关系&#xff0c;使得每当一个对象状态发生改变时&#xff0c;其相关依赖对象皆得到通知并被自动更新。 实现 myclass.h // // Created by yuwp on 2024/1/12. //#ifndef DESIGNPATTERNS_MYCLASS_H #define DESIGNPATTERNS_MYCLA…...

Java如何对OSS存储引擎的Bucket进行创建【OSS学习】

在前面学会了如何开通OSS&#xff0c;对OSS的一些基本操作&#xff0c;接下来记录一下如何通过Java代码通过SDK对OSS存储引擎里面的Bucket存储空间进行创建。 目录 1、先看看OSS&#xff1a; 2、代码编写&#xff1a; 3、运行效果&#xff1a; 1、先看看OSS&#xff1a; 此…...

ModuleNotFoundError: No module named ‘half_json‘

问题: ModuleNotFoundError: No module named ‘half_json’ 原因: 缺少jsonfixer包 解决方法: pip install jsonfixerjson修正包地址: https://github.com/half-pie/half-json...

深入探究 Android 内存泄漏检测原理及 LeakCanary 源码分析

深入探究 Android 内存泄漏检测原理及 LeakCanary 源码分析 一、什么是内存泄漏二、内存泄漏的常见原因三、我为什么要使用 LeakCanary四、LeakCanary介绍五、LeakCanary 的源码分析及其核心代码六、LeakCanary 使用示例 一、什么是内存泄漏 在基于 Java 的运行时中&#xff0…...

Linux CentOS使用Docker搭建laravel项目环境(实践案例详细说明)

一、安装docker # 1、更新系统软件包&#xff1a; sudo yum update# 2、安装Docker依赖包 sudo yum install -y yum-utils device-mapper-persistent-data lvm2# 3、添加Docker的yum源&#xff1a; sudo yum-config-manager --add-repo https://download.docker.com/linux/cen…...

第六课:Prompt

文章目录 第六课&#xff1a;Prompt1、学习总结&#xff1a;Prompt介绍预训练和微调模型回顾挑战 Pre-train, Prompt, PredictPrompting是什么?prompting流程prompt设计 课程ppt及代码地址 2、学习心得&#xff1a;3、经验分享&#xff1a;4、课程反馈&#xff1a;5、使用Mind…...

网络安全(初版,以后会不断更新)

1.网络安全常识及术语 资产 任何对组织业务具有价值的信息资产&#xff0c;包括计算机硬件、通信设施、IT 环境、数据库、软件、文档 资料、信息服务和人员等。 漏洞 上边提到的“永恒之蓝”就是windows系统的漏洞 漏洞又被称为脆弱性或弱点&#xff08;Weakness&#xff09;&a…...

开始学习Vue2(脚手架,组件化开发)

一、单页面应用程序 单页面应用程序&#xff08;英文名&#xff1a;Single Page Application&#xff09;简 称 SPA&#xff0c;顾名思义&#xff0c;指的是一个 Web 网站中只有唯一的 一个 HTML 页面&#xff0c;所有的功能与交互都在这唯一的一个页面内完成。 二、vue-cli …...

雄安移动网上营业厅/昆明优化网站公司

keys * 查看当前库所有的keyexists key 判断某个key是否存在move key db 当前库就没有了&#xff0c;被移除了expire key 秒钟&#xff1a;为给定的key设置过期时间ttl key 查看还有多少秒过期&#xff0c;-1表示永不过期&#xff0c;-2表示已过期type key 查看你的key是什么…...

建站科技公司/如何做网络推广外包

今天在处理客户反馈的时候&#xff0c;客户发现了一个严重性的问题&#xff0c;发现在el-dialog中嵌套el-form,在el-from中有个邮单编码是用扫码枪录入的&#xff0c;需求明确指出可以录入多条邮单号。但是由于我们开发时没有用扫码枪测试该功能&#xff0c;后来客户发现&#…...

wordpress站点标题字体/巨量算数数据分析入口

公司环境&#xff1a;略 二面面试时长&#xff1a;28分钟 如何实现分布式接口幂等性&#xff1f;如何保证数据一致性MySQL的间隙锁是什么&#xff1f;Redis的setNx锁有什么问题&#xff1f;HashMap数据结构&#xff1f;触发链表切换红黑树的条件是什么&#xff1f;Concurrnth…...

服装市场调网站建设的目的/网络营销网站推广方法

第一题 Q&#xff1a;在server1、server2和server3中选一个Master。 已知&#xff1a; Proposer1的编号为2&#xff1b;Proposer2的编号为1&#xff1b;Proposer3的编号为3. Proposer向Acceptor提交决议的顺序为Proposer1、Proposer3、Proposer2. 试分析&#xff1a;最终选…...

美国黄网站色网址/百度指数怎么提升

https://blog.csdn.net/weixin_40011728/article/details/77924614...

php网站开发流程/国内哪个搜索引擎最好用

1.什么是包 包本质上就是一大堆模块的集合&#xff0c;把解决一类问题的所有模块都放在一个文件夹里&#xff0c;这个文件夹就可称为一个包。  在python中&#xff0c;使用 包名.模块名来调用包中的具体模块&#xff0c;需要注意的有以下几点&#xff1a; 无论是以 import 形…...