기존 이솝 임베디드 포럼의 지식인 서비스가 게시판 형태로 변경되었습니다.

안녕하세요


질문하나 드립니다. 


최초 부팅시 특정영역을 읽어서 그에 맞는 액션을 해야 합니다 . ( 쓰기도 해야합니다. )


읽는곳은 부팅시 초기에 실행되는 디바이스 드라이버입니다. 


파일시스템이 마운트되기 전에 실행되는 놈이라 뭔가에다가 써야하는데 ( 비휘발성 메모리 ) 

어떻게 해야하는지, 방법이 있는지 궁금합니다. ( EEPROM 같은 외부메모리가 없습니다...ㅠㅠ)  


env 영역도 고려해봤는데 드라이버에서 어떻게 써야할지 모르겠고.. 


혹시 아시는분 있으시면 답변부탁드립니다.



고도리

2022.08.15 23:15:25
*.170.154.90

1. 부트로더서 하는 방법이 있습니다.

특정 영역은 OS에서 virtual memory로 mapping하지 않도록 DMA영역이나, 실제 kernel이 인식하는 메모리 영역을 특정영역은 빼고 잡으면 됩니다.


예를 들어, 256M 메모리가 있다라고 가정할 때

끝에 56M를 쓰지 않고, 200M만 커널이 인식하도록 하면 됩니다.


그 후에 커널서 56M 영역을 DMA 영역으로 매핑해서 사용할 수 있습니다.

커널이든 user space에서 mmap을 쓰던....


2. 디바이스 드라이버의 경우는 모듈로 로딩할 때 filesystem에서 읽어서 하기 때문에 filesystem을 쓰기는 쉽지 않습니다.


보통 이런 경우는 ubuntu나 pc용 linux가 부팅하는 방식대로, init ram disk를 이용해서 메모리로 로딩 후에 부팅이 끝나면 "할일하고" 실제 rootfs로 change rootfs를 해서 처리하는 방법이 있습니다.


--------------------------------

본문의 내용을 제가 이해를 제대로 못했을 수도 있지만, 방법은 있을거라고 보여집니다.


좀 더 자세하게 정리해서 써 주시면 자세하게 답변 드리겠습니다.


하하호호하하

2022.08.17 09:21:30
*.134.129.225

답변 정말 감사드립니다. 


조금더 정확하게 말하면 LCD 2종 모두 사용하려고 합니다.  ( 어떤 LCD가 연결되는지는 알수가 없음 )


최초 부팅 -> LCD driver에서 LCD ID읽음( 특정 영역에 설정이 되어있으면 pass)  -> 특정영역에 저장 -> 재부팅 -> 특정영역을 읽어 해당하는 LCD로 설정 -> 부팅 


위의 시나리오로 가려고 하는데 특정영역을 어떻게 사용해야 하는지요? 

( 재부팅 이유는 chip에 좀 문제가 있어 ID를 읽고나면 화면이 안보이는 버그가 있어 재부팅을 합니다. ) 


잘 설명이 되었는지 모르겠네요... 

고도리

2022.08.17 21:57:51
*.170.154.90

추천
1
비추천
0

AP와 storage에 따라 이래저래 다를 듯 합니다.


storage가 eMMC의 경우는 맨 앞에 boot영역 바로 다음에 있는 block 1개 정도를 할당해서 데이터를 써 넣으면 될거고요.


만일, AP 내부에 SRAM영역 혹은 사용하지 않는 register가 있다라고 하면, 해당 영역 중 안쓰는 영역에 표시하고 reset을 걸면 될 듯 합니다.


보통은 위의 2 경우는 bootloader에서도 처리가 되는 부분이니, 큰 이슈는 없을겁니다.

저장해야 하는 데이터 량이 그다지 많지는 않을 듯 해서요.

List of Articles
번호 제목 글쓴이 날짜sort 조회 수

사용자 로그인