[Встроенная разработка] ARM отключает прерывания (бит управления прерываниями CPRS | регистр разрешения прерываний | регистр маски прерываний | отключение прерываний | запись ассемблерного кода)
[Встроенная разработка] ARM отключает прерывания (бит управления прерываниями CPRS | регистр разрешения прерываний | регистр маски прерываний | отключение прерываний | запись ассемблерного кода)

Загрузите справочные статьи и сопутствующие материалы для этого блога. :

1. Управление прерываниями (на основе платы разработки S3C6410)

Этот раздел на основе S3C 6410 Совет по развитию, Различные платы разработки а также другой чип Управление прерываниями Механизмдругойиз ;

1. Два шага для отключения прерываний

(1) Шаг закрытия прерывания


Закрыть шаг прерывания :

  • 1. Шаги 1 ( программасостояние Характерзарегистрироватьсянастраивать ) : настраивать программасостояние Характерзарегистрироваться ( CPSR ) соответствующий прерывать соответствующие биты;
  • 2. Шаги 2 ( Маскирование прерыванийзарегистрироватьсянастраивать ) : настраивать Маскирование прерыванийзарегистрироваться, Должензарегистрироватьсяиз использоватьметодсуществовать Совет по развитию Информация о чипесерединаПодробное введение;

2. Биты управления прерываниями в регистре CPRS.

(1) Введение в реестр CPRS


Регистр слов состояния программы:

  • 1.зарегистрироватьсясодержание : Должензарегистрироваться середина Включать ① Бит флага кода состояния, ② прерыватьлоготип Кусочек, ③ текущийпроцессор Рабочая модель и какой-то другой ④ Статус и ⑤ Контрольная информация ;
  • 2.CPSR зарегистрироваться : Полныйсказать Current Program Status Register ( текущийпрограммасостояние Характерзарегистрироваться ), Сохраняется текущее состояние программы. ;
  • 3.SPSR зарегистрироваться : Полныйсказать Saved Program Status Register ( программасостояниедержатьзарегистрироваться ), Каждое исключение имеет соответствующий независимый SPSR зарегистрироваться, Когда возникает исключение, Первый генерал CPSR зарегистрироватьсясерединаизценить сохранить в SPSR зарегистрироватьсясередина, так что После обработки исключения Вернитесь к исходной точке останова. продолжать бежать ;
  • 4.SPSR зарегистрироватьсяточкаткань : Модель пользователя и Модель системы Нет Соответствующий SPSR зарегистрироваться, только 5 добрый аномальныймодельиметь только Соответствующий SPSR зарегистрироваться ;
    • ( 1 ) SPSR зарегистрироваться Читай и пиши : существовать Модель пользователя или Модель системы Читай и пиши SPSR инструкция Возникнут непредсказуемые ошибки. ;

(2) Биты, относящиеся к управлению прерываниями регистра CPRS


CPRS Зарегистрируйте биты, связанные с управлением прерываниями :

  • 1.обычно Управление прерываниями Кусочек : Позиция I, позиция [7], нравитьсяфруктынастраивать Понятно Должен Кусочек Может закрытие обычнопрерывать ;
  • 2.быстрый Управление прерываниями Кусочек : F бит, бит [6], нравитьсяфруктынастраивать Понятно Должен Кусочек, Может закрытие быстрыйпрерывать ;

3. Регистр разрешения прерываний.

Справочное руководство : S3C6410X.pdf ( на основе 6410 Совет по развитию )

  • 1. Соответствующие главы руководства: 12.6.5 Глава ВЕКТОРНЫЕ КОНТРОЛЛЕРЫ ПРЕРЫВАНИЙ;
  • 2. Адрес загрузки руководства по чипу S3C6410:https://download.csdn.net/download/han1202012/10412045

(1) Знакомство с регистром разрешения прерываний


Регистр разрешения прерываний ( VICINTENABLE ) :

  • 1.точкадлядвазарегистрироваться : Регистр разрешения прерываний точка двазарегистрироваться Контролировать все испрерывать открытые функции;
    • ( 1 ) зарегистрироваться1 VIC0INTENABLE : Его адрес 0x71200010 ;
    • ( 2 ) зарегистрироваться2 VIC1INTENABLE : Его адрес 0x71300010 ;
  • 2.зарегистрироваться Кусочек : этотдвазарегистрироватьсясередина, Каждому Кусочку соответствует добрыйпрерывать источник.;
  • 3.прерыватьзакрытие Состояние : существовать При перезапуске Все испрерывать должно быть запрещено ;
  • 4.зарегистрироваться Функция : Активировать прерывание строки запроса, Разрешить прерывание сигнала достичь процессор ; Посмотреть соответствующие Кусочиценастройки, Может получить определенный добрый тип, выяснять, приедет ли «Может» процессор ;
    • ( 1 ) читать 0 ценить : нравитьсяфруктычитатьизценить для 0, Так прерывать Нет в наличии;
    • ( 1 ) читать 1 ценить : нравитьсяфруктычитатьизценить для 1, Так прерывать Доступный;
  • 5.настраиватьзарегистрироватьсяценить : этотдвазарегистрироваться может тольконастраиватьпрерывать Можетиспользовать,Не могущийнастраивать щит прерывать, нравитьсяфруктынастраивать 1 Такактивацияпрерывать, настраивать 0 Нет никакого эффекта, Если хочешь щитпрерывать, Такнуждатьсяиспользовать Маскирование прерыванийзарегистрироваться VICINTENCLEAR;
    • ( 1 ) настраивать 0 ценить : настраивать 0 ценить Нет никакого эффекта;
    • ( 2 ) настраивать 1 ценить : настраивать 1 ценить активацияпрерывать Функция;

(2) Знакомство с регистром маски прерываний


Регистр маски прерывания (VICINTENCLEAR). Введение:

  • 1.точкадлядвазарегистрироваться : прерывать щит зарегистрироваться точка двазарегистрироваться Контролировать все испрерывать щит из функции;
    • ( 1 ) зарегистрироваться1 VIC0INTENABLE : Его адрес 0x71200010 ;
    • ( 2 ) зарегистрироваться2 VIC1INTENABLE : Его адрес 0x71300010 ;
  • 2.зарегистрироваться Кусочек : этотдвазарегистрироватьсясередина, Каждому Кусочку соответствует добрыйпрерывать источник.;
  • 3. Обзор функций: Прозрачный Маскирование прерыванийзарегистрироваться ( VICINTENABLE ) середина Соответствующий Кусочек Сразу Можетщит Соответствующийпрерывать ;
    • ( 1 ) настраивать 0 ценить : Нет никакого эффекта ;
    • ( 2 ) настраивать 1 ценить : щит Соответствующийпрерыватьисточник ;

2. Пример кода отключения прерываний

Справочное руководство : S3C6410X.pdf ( на основе 6410 Совет по развитию )

  • 1. Соответствующие главы руководства: 12.6.5 Глава ВЕКТОРНЫЕ КОНТРОЛЛЕРЫ ПРЕРЫВАНИЙ;
  • 2. Адрес загрузки руководства по чипу S3C6410:https://download.csdn.net/download/han1202012/10412045

1. Написание ассемблерного кода

(1) Установите регистр слова состояния программы CPRS.


CPRS настраивать ценить анализировать : Этот реестр должен учитывать два аспекта: ① настраиватьпроцессориз SVC Рабочая модель, ② Отключить прерывания ;

  • 1.SVC модельнастраивать : SVC модельнужно CPRS из M [ 4 : 0 ] Кусочек настраиватьдля Указать 0b10011 ценить;
  • 2.обычнопрерыватьнастраивать : закрытие обычнопрерывать, нужно CPRS из I [ 7 ] Кусочек настраиватьдля 1;
  • 3.быстрыйпрерыватьнастраивать : закрытие быстрыйпрерывать, нужно CPRS из F [ 6 ] Кусочек настраиватьдля 1;
  • 4. Наконец CPRS зарегистрироватьсянастраиватьизценить : Финальнаяценитьдля 0b11010011,Чтосередина 0 ~ 5 Кусочек из 0b10011 настраиватьизда SVC режим работы, 0b11000000 настраивать I и F Кусочек для 1, этот样в то же времянастраивать Понятно процессориз SVC Рабочая модель и закрытие Понятно обычнопрерывать и быстрыйпрерывать ;

(2) Установите регистр слова состояния программы CPRS. Логический анализ кода.


код логика анализировать : До настраивать Когда процессор находится в рабочем режиме вовлеченный CPRS зарегистрироватьсянастраивать, существоватьздесь Воля Отключить Также включена операция прерыванияиз.;

  • 1.настраивать CPRS зарегистрироваться возможность : руководить процессор Рабочая модель настраивать дасуществовать Совет по развитие После включения, Соответствующий reset Вектор исключений;
  • 2.настраивать этикетка с инструкциями : настраиватьодинэтикетка с инструкциями, Метка существования определяет группу сборников стандартов, Когда необходимо выполнить данную группу инструкций, Просто перейдите к метке;
    • (1) Определите метку: set_svc :, метка существования определяет группу сборников стандартов;
  • 3.Экспорт CPSR зарегистрироватьсяценить : использовать MRS инструкция, Прямо сейчас mrs r0 cpsr Воля CPSR зарегистрироватьсясерединаизценить Экспортировать в R0 зарегистрироватьсясередина;
  • 4. будет R0 серединаиз M Кусочек прозрачный 0 : существовать R0 середина Воляот CPSR середина Экспортиззарегистрироватьсяценить Соответствующий 0 ~ 4 Кусочек прозрачный0, использовать bic r0, r0, #0x1f, Воля R0 зарегистрироватьсяизценить и #0x1f руководить и операция,Прямо сейчас Через 5 Кусочек Всенастраиватьстановиться0, Затем Воля и Результаты операций подтверждаются в R0 зарегистрироватьсясередина ;
  • 5.Воля R0 серединаиз M Кусочек настраивать моделькод : существовать Изображение нижесередина, svc измоделькод 0b10011 ( двоичный ), Прямо сейчас 0x13 ( шестнадцатеричный ), в то же времязакрытие обычнопрерывать и быстрыйпрерывать,финальныйнастраиватьценитьдля 0b11010011, Прямо сейчас 0xd3, использовать orr r0, r0, #0xd3 заявлениенастраивать, Воля R0 зарегистрироватьсясерединаизценить и 0x13 руководить или операция, Воля или Операцияиз Результаты Хранить в R0 зарегистрироватьсясередина;
  • 6.Воляценитьнапиши ответ CPSR зарегистрироваться : использовать MSR инструкция msr cpsr, r0 , Воляпричинанадиз CPSR зарегистрироватьсяценить настраивать Давать CPSR зарегистрироваться;

(3) Установите регистр маски прерывания и логический анализ кода.


настраивать Маскирование прерываний зарегистрироваться Код компиляции анализировать :

  • 1.настраивать Маскирование прерываний зарегистрироваться возможность : руководить Отключить прерывания настраивать дасуществовать Совет по развитие После включения, Соответствующий reset Вектор исключений, поэтому существовать reset в осуществлять Связанныйиз закрытие прерывать изкод ;
  • 2.настраивать этикетка с инструкциями : настраиватьодинэтикетка с инструкциями, Метка существования определяет группу сборников стандартов, Когда необходимо выполнить данную группу инструкций, Просто перейдите к метке, код disable_interrupt :, Затем существовать reset в, перейти к Эта метка выполняется , bl disable_interrupt ;
  • 3.Подготовка Все Кусочки 1 данные : mvn r1, #0x0, Воля 0 в соответствии с Кусочекотрицать настраиватьприезжать r1 Универсальныйзарегистрироватьсясередина;
    • (1) Инструкция отрицания: MVN инструкция, грамматика MVN{условие}{S} <dest>, <op 1> , Воля Количество операций 1 изценить Первыйв соответствии с Кусочекотрицать, существовать Воляценитьнастройкиto dest зарегистрироватьсясередина ;
    • (2) Описание инструкции: dest должендазарегистрироваться, Количество операций 1 ( op 1 ) может быть зарегистрироваться, взолнованный Кусочекиззарегистрироваться или стоять Прямо сейчасчисло ;
  • 4.настраивать Нет.один Маскирование прерываний зарегистрироваться : ① Первый генерал зарегистрироваться Адрес загружается в Универсальныйзарегистрироватьсясередина, код ldr r0, =0x71200014, ② Снова Воля Полный 1 оценитьнастройки зарегистрироватьсясередина, Достигнут адрес памяти для регистрации R0 Универсальныйзарегистрироватьсясередина, код str r1,[r0] ;
    • (1) синтаксис команды ldr: LDR{условие} Rd, <адрес>,Воля Памятьсерединаизданныенагрузкаприезжать зарегистрироваться середина, Rd Должна быть общая регистрация,
    • (2) синтаксис инструкции str: STR{условие} Rd, <адрес>, Волязарегистрироватьсясерединаизданные нагрузка памяти середина; Воля Rd зарегистрироватьсяизсодержание нагрузкаприезжатьадрессередина;
    • (3) Примечания к команде ldr: округточка ldr r0, =0x71200014 и ldr r0, 0x71200014, Первый - Воля 0x71200014 числоценитьнагрузкаприезжатьзарегистрироватьсясередина, Последний - Воля 0x71200014 Адрес серединаиз Контент нагрузкиto r0 зарегистрироватьсясередина ;
  • 5.настраивать Нет.два Маскирование прерыванийзарегистрироваться : ① Первый генерал зарегистрироваться Адрес загружается в Универсальныйзарегистрироватьсясередина, код ldr r0, =0x71300014, ② Снова Воля Полный 1 оценитьнастройки зарегистрироватьсясередина, Достигнут адрес памяти для регистрации R0 Универсальныйзарегистрироватьсясередина, код str r1,[r0] ;
    • (1) синтаксис команды ldr: LDR{условие} Rd, <адрес>,Воля Памятьсерединаизданныенагрузкаприезжать зарегистрироваться середина, Rd Должна быть общая регистрация,
    • (2) синтаксис инструкции str: STR{условие} Rd, <адрес>, Волязарегистрироватьсясерединаизданные нагрузка памяти середина; Воля Rd зарегистрироватьсяизсодержание нагрузкаприезжатьадрессередина;
    • (3) Примечания к команде ldr: округточка ldr r0, =0x71200014 и ldr r0, 0x71200014, Первый - Воля 0x71300014 числоценитьнагрузкаприезжатьзарегистрироватьсясередина, Последний - Воля 0x71300014 Адрес серединаиз Контент нагрузкиto r0 зарегистрироватьсясередина ;

(4) Полный пример ассемблерного кода


Код компиляции Пример : Bootloader процесс : ① Инициализировать таблицу векторов исключений , ② настраивать svc модель , ③ Выключите сторожевой таймер, ④ Отключить прерывания ;

код Язык:javascript
копировать
@****************************  
@File:start.S  
@  
@BootLoader Инициализировать 
@****************************  

.text                                   @ Макрос Укажите кодовую часть  
.global _start                          @ Заявление о псевдостандарте Полный символ начала иннинга  
_start:                                 @ входной знак программы  
        b   reset                       @ reset Комплексное исключение Кусочек  
        ldr pc, _undefined_instruction  @ неопределенное исключение,Воля _undefined_instruction ценитьнагрузкаприезжать pc указательсередина  
        ldr pc,_software_interrupt     @ мягкийпрерыватьаномальный  
        ldr pc, _prefetch_abort         @ Исключение по предварительной выборке  
        ldr pc, _data_abort             @ Исключение чтения данных  
        ldr pc, _not_used               @ занимать 0x00000014 адрес                            
        ldr pc,_irq                    @ обычнопрерыватьаномальный  
        ldr pc, _fiq                    @ мягкийпрерыватьаномальный  

_undefined_instruction: .word undefined_instruction @ _undefined_instruction Этикетка хранит ценить, Долженценитьда 32 Кусочекадрес undefined_instruction, undefined_instruction даодинадрес  
_software_interrupt:    .word software_interrupt    @ мягкийпрерыватьаномальный  
_prefetch_abort:    .word prefetch_abort            @ Исключение по предварительной выборке причина  
_data_abort:        .word data_abort                @ Исключение чтения данных  
_not_used:      .word not_used                      @ нулевой Кусочекпричина  
_irq:           .word irq                           @ обычнопрерыватьпричина  
_fiq:           .word fiq                           @ быстрыйпрерыватьпричина  

undefined_instruction:                              @ undefined_instruction адрес Требования к хранениюосуществлятьизсодержание  
        nop  

software_interrupt:                                 @ software_interrupt адрес Требования к хранениюосуществлятьизсодержание  
        nop  

prefetch_abort:                                     @ prefetch_abort адрес Требования к хранениюосуществлятьизсодержание  
        nop  

data_abort:                                         @ data_abort адрес Требования к хранениюосуществлятьизсодержание  
        nop  

not_used:                                           @ not_used адрес Требования к хранениюосуществлятьизсодержание  
        nop  

irq:                                                @ irq адрес Требования к хранениюосуществлятьизсодержание  
        nop  

fiq:                                                @ fiq адрес Требования к хранениюосуществлятьизсодержание  
        nop  

reset:                                              @ reset адрес Требования к хранениюосуществлятьизсодержание  
        bl set_svc                                  @ перейти к set_svc этикетка в исполнении
        bl disable_watchdog                         @ перейти к disable_watchdog выполнение этикетки, закрытиесторожевой пес
        bl disable_interrupt                        @ перейти к disable_interrupt выполнение этикетки, Отключить прерывания

set_svc:
        mrs r0, cpsr                                @ Воля CPSR зарегистрироватьсясерединаизценить Экспортировать в R0 зарегистрироватьсясередина
        bic r0, r0, #0x1f                           @ Воля R0 зарегистрироватьсясерединаизценить и #0x1f стоять Прямо сейчасчисло руководитьи операция, Я хочу сохранить результаты в R0 зарегистрироватьсясередина, На самом деле это Волязарегистрироваться 0 ~ 4 Кусочек набор 0
        orr r0, r0,#0xd3                           @ Воля R0 зарегистрироватьсясерединаизценить и #0xd3 стоять Прямо сейчасчисло руководитьили операция, Я хочу сохранить результаты в R0 зарегистрироватьсясередина, действительныйданастраивать 0 ~ 4 Кусочек зарегистрироватьсяценить изпроцессор Рабочая моделькод
        msr cpsr, r0                                @ Воля R0 зарегистрироватьсясерединаизценить сохранить в CPSR зарегистрироватьсясередина

#define pWTCON 0x7e004000                           @ Определение сторожевого контроля зарегистрироваться адрес ( 6410Совет по развитию )
disable_watchdog:                                 
        ldr r0, =pWTCON                             @ Первый генералконтрользарегистрироватьсяадрессохранить в Универсальныйзарегистрироватьсясередина        mov r1, #0x0                                @ подготовить один 0 ценить,сторожевой песконтрользарегистрироваться Всенастраиватьдля0, Прямо сейчасwatchdog также закрытие
        str r1, [r0]                                @ Воля 0 ценить настраиватьприезжать Сторожевой контроль зарегистрироваться середина 

disable_interrupt:
    mvn r1,#0x0                                     @ Воля 0x0 в соответствии с Кусочекотрицать, получать Полный 1 изданные,настраиватьприезжать R1 зарегистрироватьсясередина
    ldr r0,=0x71200014                              @ настраивать Нет.один Маскирование прерыванийзарегистрироваться,Первый генерал зарегистрироваться Адрес загружается в Универсальныйзарегистрироваться R0 середина 
    str r1,[r0]                                     @ Снова Воля Полный 1 оценитьнастройки зарегистрироватьсясередина, Достигнут адрес памяти для регистрации R0 Универсальныйзарегистрироватьсясередина    ldr r0,=0x71300014                              @ настраивать Нет.два Маскирование прерыванийзарегистрироваться,Первый генерал зарегистрироваться Адрес загружается в Универсальныйзарегистрироваться R0 середина 
    str r1,[r0]                                     @ Снова Воля Полный 1 оценитьнастройки зарегистрироватьсясередина, Достигнут адрес памяти для регистрации R0 Универсальныйзарегистрироватьсясередина

2. Скрипт компоновщика


gboot.lds скрипт компоновщика кодоаналитика :

  • 1. Укажите выходной формат ( процессор Архитектура ) : использовать OUTPUT_ARCH(имя схемы) указатьвыходной формат,Прямо сейчаспроцессориз Архитектура, вот arm архитектураиз, OUTPUT_ARCH(arm) ;
  • 2. Укажите выходную программуиз входа : настраиватькомпилироватьвыходизпрограмма Вход Кусочекнабор, грамматикадля ENTRY(Вход Кусочекнабор), существоватьвышеиз Start.S серединанастраиватьизпрограмма Входда _start, коддля ENTRY(_start) ;
  • 3.настраиватькодчасть : использовать .text : настраиватькодчасть;
  • 4.настраиватьданныечасть : использовать .data : настраиватьданныечасть;
  • 5.настраивать BSS часть : использовать .bss : настраивать BSS часть;
    • ( 1 ) Записывать BSS частьизначинатьадрес : bss_start = .; ;
    • ( 2 ) Записывать BSS частьиз Заканчиватьадрес : bss_end = .; ;
  • 6. Выравнивание: Каждая часть требует настройки памяти из формата выравнивания, использовать . = ALIGN(4); настройки четырехбайтовое выравнивание Прямой сейчас Может;
  • 7.код Пример :
код Язык:javascript
копировать
OUTPUT_ARCH(arm)        /*Указываем структуру процессора*/  
ENTRY(_start)           /*Указываем вход в программу существовать _start Этикетка **/  
SECTIONS {                
    . = 0x50008000;     /*весьпрограмма Связьизначинать Кусочекнабор, По данным Совета по развитию Конечно, другой Совет по развитиюадреснепоследовательный*/  

    . = ALIGN(4);       /*Причина выравнивания, Каждыйчастьначинать Доруководить 4 Выравнивание байтов */  
    .text :             /*кодчасть*/  
    {  
    start.o (.text)     /*start.S Конвертировать в исходную часть*/  
    *(.text)            /*Другая часть кода*/  
    }  

    . = ALIGN(4);       /*Причина выравнивания, Каждыйчастьначинать Доруководить 4 Выравнивание байтов */  
    .data :             /*данныечасть*/  
    {  
    *(.data)  
    }  

    . = ALIGN(4);       /*Причина выравнивания, Каждыйчастьначинать Доруководить 4 Выравнивание байтов */  
    bss_start = .;      /*Записывать bss частьначинать Кусочекнабор*/  
    .bss :              /*bss часть*/  
    {  
    *(.bss)   
    }  
    bss_end = .;        /*Записывать bss часть Заканчивать Кусочекнабор*/  
} 

3. Скрипт компиляции Makefile


makefile Написание документов :

  • 1. Общие правила (правила составления файла сборки): файл сборки компилировать стать одноименным .o документ, документ имеет то же имя,суффиксдругой, %.o : %.S, Производственный процесс arm-linux-gcc -g -c $^ , Чтосередина ^ Логотип все зависит от документа, существовать по этому правилу start.S будет мутировать в start.o ;
  • 2. Общие правила ( C документкомпилироватьправило ) : C кодкомпилироватьстать одноименным .o документ, %.o : %.c , Производственный процесс arm-linux-gcc -g -c $^ ;
  • 3.настройка конечной цели : использовать all: настраиватьфинальныйкомпилировать Цель; ( 1 ) полагатьсядокумент : Для достижения конечной цели требуются зависимости start.o документ, использовать all: start.o Указывает, что конечная цель зависит от этого документа; ( 2 ) процесс связи : arm-linux-ld -Tgboot.lds -o gboot.elf ^,нуждатьсяиспользоватьскрипт компоновщикаруководитьсоединять, ①Инструмент ссылки arm-linux-ld инструмент, ②Использование -Tgboot.lds настраиватьскрипт компоновщика я только что написал из gboot.lds скрипт компоновщика, ③Выходной документ gboot.elf Это документ комнаты, ④ Документ зависимости ^ Представляет все зависимости; ( 3 ) Конвертировать в исполняемый двойной документ : arm-linux-objcopy -O binary gboot.elf gboot.bin,использовать -O binary настраиватьвыходдвоичныйдокумент, Документ зависимости gboot.elf,выходиз Можетосуществлятьдвоичныйдокумент Прямо сейчас оказаться gboot.bin ;
  • 4.makefile документсодержание :
код Язык:javascript
копировать
all: start.o #зависит от start.o  
    arm-linux-ld -Tgboot.lds -o gboot.elf $^    #использоватьскрипт компоновщика, Воля start.o изменятьдля gboot.elf  
    arm-linux-objcopy -O binary gboot.elf gboot.bin #Воля gboot.elf Преобразуйте для Может непосредственно в существование и выполните его на доске из gboot.bin документ  

%.o : %.S   #общие правила, нравиться start.o сделан из start.S компилировать Приходитьиз, -c только компилировать, не связано  
    arm-linux-gcc -g -c $^  

%.o : %.c   #общие правила, нравиться start.o сделан из start.c компилировать Приходитьиз, -c только компилировать, не связано  
    arm-linux-gcc -g -c $^  

.PHONY: clean     
clean:              #Прозрачныйкомпилироватьинформация  
    rm *.o *.elf *.bin  

4. Скомпилируйте и выведите исполняемый файл.


Процесс компиляции :

  • 1.документ Подготовить : Воля Код компиляции ( start.S ) скрипт компоновщика ( gboot.lds ) makefile документ Скопировать в каталог компилировать ;
  • 2. Выполните команду компилировать : make ;
  • 3.компилировать Узелфрукты : Может посмотреть Сгенерировано компилировать Цельдокумент start.o,Связьдокумент gboot.elf,Можетосуществлятьиздвоичныйдокумент gboot.bin ;

Загрузите справочные статьи и сопутствующие материалы для этого блога. :

boy illustration
.NET Как загрузить файлы через HttpWebRequest
boy illustration
[Веселый проект Docker] Обновленная версия 2023 года! Создайте эксклюзивный инструмент управления паролями за 10 минут — Vaultwarden
boy illustration
Высокопроизводительная библиотека бревен Golang zap + компонент для резки бревен лесоруба подробное объяснение
boy illustration
Концепция и использование Springboot ConstraintValidator
boy illustration
Новые функции Go 1.23: точная настройка основных библиотек, таких как срезы и синхронизация, значительно улучшающая процесс разработки.
boy illustration
[Весна] Введение и базовое использование AOP в Spring, SpringBoot использует AOP.
boy illustration
Чтобы начать работу с рабочим процессом Flowable, этой статьи достаточно.
boy illustration
Байтовое интервью: как решить проблему с задержкой сообщений MQ?
boy illustration
ASP.NET Core использует функциональные переключатели для управления реализацией доступа по маршрутизации.
boy illustration
[Проблема] Решение Невозможно подключиться к Redis; вложенное исключение — io.lettuce.core.RedisConnectionException.
boy illustration
От теории к практике: проектирование чистой архитектуры в проектах Go
boy illustration
Решение проблемы искажения китайских символов при чтении файлов Net Core.
boy illustration
Реализация легких независимых конвейеров с использованием Brighter
boy illustration
Как удалить и вернуть указанную пару ключ-значение из ассоциативного массива в PHP
boy illustration
Feiniu fnos использует Docker для развертывания учебного пособия по AList
boy illustration
Принципы и практика использования многопоточности в различных версиях .NET.
boy illustration
Как использовать PaddleOCRSharp в рамках .NET
boy illustration
CRUD используется уже два или три года. Как читать исходный код Spring?
boy illustration
Устраните проблему совместимости между версией Spring Boot и Gradle Java: возникла проблема при настройке корневого проекта «demo1» > Не удалось.
boy illustration
Научите вас шаг за шагом, как настроить Nginx.
boy illustration
Это руководство — все, что вам нужно для руководства по автономному развертыванию сервера для проектов Python уровня няни (рекомендуемый сборник).
boy illustration
Не удалось запустить docker.service — Подробное объяснение идеального решения ️
boy illustration
Настройка файлового сервера Samba в системе Linux Centos. Анализ NetBIOS (супер подробно)
boy illustration
Как настроить метод ssh в Git, как получить и отправить код через метод ssh
boy illustration
RasaGpt — платформа чат-ботов на основе Rasa и LLM.
boy illustration
Nomic Embed: воспроизводимая модель внедрения SOTA с открытым исходным кодом.
boy illustration
Улучшение YOLOv8: EMA основана на эффективном многомасштабном внимании, основанном на межпространственном обучении, и эффект лучше, чем у ECA, CBAM и CA. Малые цели имеют очевидные преимущества | ICASSP2023
boy illustration
Урок 1 серии Libtorch: Тензорная библиотека Silky C++
boy illustration
Руководство по локальному развертыванию Stable Diffusion: подробные шаги и анализ распространенных проблем
boy illustration
Полностью автоматический инструмент для работы с видео в один клик: VideoLingo